我试过:

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

and:

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

但是总会出现一个500的错误代码。


当前回答

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

其他回答

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

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

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

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

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:当然你可以创建一个对象来扩展标准错误,就像这样:

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

与一些(可能是较旧的?)express版本捆绑在一起的errorHandler中间件的版本似乎对状态代码进行了硬编码。另一方面,这里记录的版本:http://www.senchalabs.org/connect/errorHandler.html可以让您做您想做的事情。所以,也许可以尝试升级到最新版本的express/connect。

异步方式:

  myNodeJs.processAsync(pays)
        .then((result) => {
            myLog.logger.info('API 200 OK');
            res.statusCode = 200;
            res.json(result);
            myLog.logger.response(result);
        })
        .fail((error) => {
            if (error instanceof myTypes.types.MyError) {
                log.logger.info(`My Custom Error:${error.toString()}`);
                res.statusCode = 400;
                res.json(error);
            } else {
                log.logger.error(error);
                res.statusCode = 500;
                // it seems standard errors do not go properly into json by themselves
                res.json({
                    name: error.name,
                    message: error.message
                });
            }
            log.logger.response(error);
        })
        .done();