HTTP त्रुटि कोड कैसे निर्दिष्ट करें?


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/…
127 #

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
एपीआई के नवीनतम संस्करण का उपयोग करने के लिए +1। यदि आप तार को और नीचे भेजना चाहते हैं, तो बस चेन:res.status(400).json({ error: 'message' })
TyMayn

1
@ मायिक अगर आपके पास प्रतिक्रिया चर नहीं है, तो आप प्रतिक्रिया नहीं भेज सकते।
डैन मंडले

1
यह सब अब हटा दिया गया है, आपको उपयोग करना चाहिए res.sendStatus(401);
सिपि

1
यदि यह समाप्त हो जाता है तो यह प्रतिक्रिया बहुत अधिक पूर्ण होगी res.send('Then you shall die')
अलविदा

1
@Cipi क्या आपके पास इसके लिए कोई स्रोत है? प्रलेखन इंगित नहीं करता .status()है पदावनत है। जहाँ के लिए मानक HTTP प्रतिक्रिया पाठ है के लिए .sendStatus()सिर्फ एक आशुलिपि है । .status(code).send(codeName)codeNamecode
जेम्स कोयल


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

एक्सप्रेस 4.0 में वे इसे सही समझे :)

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

पुराना सवाल है, लेकिन अभी भी Google पर आ रहा है। एक्सप्रेस (3.4.0) के वर्तमान संस्करण में, आप अगली (गलत) कॉल करने से पहले res.statusCode को बदल सकते हैं:

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

आगे क्या करता है?
स्टीव के

nextअगले हैंडलर को बुला रहा है, जो एक्सप्रेस में है। आमतौर पर त्रुटि पृष्ठों को प्रस्तुत करने की कोशिश कर रहे हैं।
कुरोत्सुकी


2

मैंने कोशिश की

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

.. लेकिन यह मुझे त्रुटि दे रहा था :

(नोड: 208) UnhandledPromiseRejectionWarning: त्रुटि: भेजे जाने के बाद हेडर सेट नहीं कर सकते।

यह काम मेरे लिए

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

0

मैं बूम पैकेज का उपयोग करके http त्रुटि कोड भेजने की हैंडलिंग करने की सलाह दूंगा ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.