如何指定HTTP错误代码?

我努力了:

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被宣布。

根据Express(版本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'); 

简单的一个class轮;

 res.status(404).send("Oh uh, something went wrong"); 

你可以使用res.send('OMG :(', 404);只是res.send(404);

捆绑了一些(可能是较老版本的)express版本的errorHandler中间件版本似乎具有硬编码的状态代码。 这里logging的版本: http : //www.senchalabs.org/connect/errorHandler.html另一方面可以让你做你想做的事情。 所以,也许尝试升级到最新版本的快递/连接。

老问题,但仍然在谷歌上。 在当前版本的Express(3.4.0)中,可以在调用next(err)之前更改res.statusCode:

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

从我在Express 4.0中看到的这个对我来说很有用。 这是authentication所需的中间件的例子。

 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); } 

在快车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') 

我想以这种方式集中创build错误响应:

 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}) }); 

所以我总是有相同的错误输出格式。

PS:当然你可以创build一个对象来扩展这样的标准错误 :

 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);