我试过:

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(body, status)。

使用res.status(status).send(body)或res.sendStatus(status)代替

其他回答

从我在Express 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);
}

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

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

我试着

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

..但它给了我错误:

(节点:208)UnhandledPromiseRejectionWarning:错误:不能设置报头 在发送之后。

这对我很有用

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

我建议使用Boom包来处理http错误代码的发送。

异步方式:

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