এইচটিটিপি ত্রুটি কোড কীভাবে নির্দিষ্ট করবেন?


161

আমি চেষ্টা করেছি:

app.get('/', function(req, res, next) {
    var e = new Error('error message');
    e.status = 400;
    next(e);
});

এবং:

app.get('/', function(req, res, next) {
    res.statusCode = 400;
    var e = new Error('error message');
    next(e);
});

তবে সর্বদা 500 এর একটি ত্রুটি কোড ঘোষণা করা হয়।


1
একটি সম্পর্কিত প্রশ্নের আমার উত্তর সাহায্য করতে পারে: stackoverflow.com/questions/10170857/...
Pickels

2
আপনি দয়া করে গৃহীত প্রতিক্রিয়া আপডেট করতে পারেন?
ড্যান ম্যান্ডলে

উত্তর:


293

এক্সপ্রেস (সংস্করণ 4+) ডক্স প্রতি, আপনি ব্যবহার করতে পারেন:

res.status(400);
res.send('None shall pass');

http://expressjs.com/4x/api.html#res.status

<= 3.8

res.statusCode = 401;
res.send('None shall pass');

37
API এর সর্বশেষতম সংস্করণটি ব্যবহার করার জন্য +1। আপনি যদি তারে আরও নীচে প্রেরণ করতে চান তবে কেবল চেইন করুন:res.status(400).json({ error: 'message' })
TyMayn

1
@ মাইকেল যদি আপনার প্রতিক্রিয়া ভেরিয়েবল না থাকে তবে আপনি প্রতিক্রিয়া পাঠাতে পারবেন না।
ড্যান ম্যান্ডলে

1
এটি এখন সমস্ত অবহিত, আপনার ব্যবহার করা উচিত res.sendStatus(401);
সিপি

1
এই প্রতিক্রিয়াটি যদি এটির সাথে শেষ হয় তবে এটি আরও অনেক সম্পূর্ণ হবে res.send('Then you shall die')
মঙ্গলবার

1
@ সিপি আপনার কাছে কি কোনও উত্স আছে? ডকুমেন্টেশন .status()হ্রাস করা হয় তা নির্দেশ করে না । .sendStatus()প্রদত্তের জন্য .status(code).send(codeName)যেখানে codeNameস্ট্যান্ডার্ড এইচটিটিপি প্রতিক্রিয়া পাঠ্য এটি কেবল একটি সংক্ষিপ্ত হাত code
জেমস কোয়েল


20

আমি এইভাবে ত্রুটি প্রতিক্রিয়া তৈরির কেন্দ্রীভূত করতে চাই:

app.get('/test', function(req, res){
  throw {status: 500, message: 'detailed message'};
});

app.use(function (err, req, res, next) {
  res.status(err.status || 500).json({status: err.status, message: err.message})
});

সুতরাং আমি সবসময় একই ত্রুটি আউটপুট ফর্ম্যাট আছে।

পিএস: অবশ্যই আপনি এই জাতীয় স্ট্যান্ডার্ড ত্রুটি বাড়ানোর জন্য একটি অবজেক্ট তৈরি করতে পারেন :

const AppError = require('./lib/app-error');
app.get('/test', function(req, res){
  throw new AppError('Detail Message', 500)
});

'use strict';

module.exports = function AppError(message, httpStatus) {
  Error.captureStackTrace(this, this.constructor);
  this.name = this.constructor.name;
  this.message = message;
  this.status = httpStatus;
};

require('util').inherits(module.exports, Error);

16

আপনি res.send('OMG :(', 404);ঠিক ব্যবহার করতে পারেনres.send(404);


তবে আমি চাই ত্রুটি কোডটি ইভেন্টহ্যান্ডলার মিডলওয়্যারের কাছে প্রেরণ করা হোক, সুতরাং এক্সপ্রেসের কাস্টম ত্রুটি পৃষ্ঠাটি প্রদর্শিত হবে।
টেক ম্যান

12
যে কেউ 2016 এ এটি পড়ছেন: এক্সপ্রেস 4.x অনুযায়ী, হ্রাস res.send(404)করা হয়েছে। এখন res.sendStatus(404)expressjs.com/en/api.html#res.sendStatus
0xRm

12

এক্সপ্রেস ৪.০ এ তারা ঠিক পেয়েছে :)

res.sendStatus(statusCode)
// Sets the response HTTP status code to statusCode and send its string representation as the response body.

res.sendStatus(200); // equivalent to res.status(200).send('OK')
res.sendStatus(403); // equivalent to res.status(403).send('Forbidden')
res.sendStatus(404); // equivalent to res.status(404).send('Not Found')
res.sendStatus(500); // equivalent to res.status(500).send('Internal Server Error')

//If an unsupported status code is specified, the HTTP status is still set to statusCode and the string version of the code is sent as the response body.

res.sendStatus(2000); // equivalent to res.status(2000).send('2000')

11

এক্সপ্রেসের কিছু (সম্ভবত আরও পুরানো?) সংস্করণগুলির সাথে বান্ডিল হওয়া ত্রুটিহ্যান্ডলার মিডলওয়্যারের সংস্করণটি স্থিতি কোডটি হার্ডকোডযুক্ত বলে মনে হয়। সংস্করণটি এখানে নথিভুক্ত করা হয়েছে: অন্যদিকে http://www.senchalabs.org/connect/errorHandler.html আপনি যা করার চেষ্টা করছেন তা আপনাকে করতে দেয়। সুতরাং, সম্ভবত এক্সপ্রেস / সংযোগের সর্বশেষতম সংস্করণে আপগ্রেড করার চেষ্টা করছি।


9

এক্সপ্রেস 4.0.০ এ আমি যা দেখেছি তা থেকে এটি আমার পক্ষে কাজ করে। এটি প্রমাণীকরণের প্রয়োজনীয় মিডওয়্যারটির উদাহরণ।

function apiDemandLoggedIn(req, res, next) {

    // if user is authenticated in the session, carry on
    console.log('isAuth', req.isAuthenticated(), req.user);
    if (req.isAuthenticated())
        return next();

    // If not return 401 response which means unauthroized.
    var err = new Error();
    err.status = 401;
    next(err);
}

8

পুরানো প্রশ্ন, তবে এখনও গুগলে উঠে আসছে। এক্সপ্রেসের বর্তমান সংস্করণে (3.4.0), আপনি পরবর্তী (ত্রুটি) কল করার আগে রেস.স্ট্যাটাসকোড পরিবর্তন করতে পারবেন:

res.statusCode = 404;
next(new Error('File not found'));

পরেরটি কী করে?
স্টিভ কে

nextপরবর্তী হ্যান্ডলারকে কল করছে যা এক্সপ্রেস.জেজে সাধারণত ত্রুটি পৃষ্ঠাগুলি রেন্ডার করার চেষ্টা করে।
কুরোটসুকি

2

এক্সপ্রেস অবহেলিত রেস.সেন্ড (শরীর, স্থিতি)। পরিবর্তে res.status (স্থিতি)। বিক্রয় (বডি) ব্যবহার করুন


2

আমি চেষ্টা করেছিলাম

res.status(400);
res.send('message');

.. তবে এটি আমাকে ত্রুটি দিচ্ছিল :

(নোড: 208) আনহানডেল্ডপ্রাইম রিজেকশন সতর্কতা: ত্রুটি: শিরোনামগুলি প্রেরণের পরে সেট করতে পারে না।

আমার জন্য এই কাজ

res.status(400).send(yourMessage);

0

আমি বুম প্যাকেজটি ব্যবহার করে HTTP ত্রুটি কোডগুলি প্রেরণকে পরিচালনা করার পরামর্শ দেব ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.