如果我在express中定义错误处理中间件,代码可能是这样的:
app.use(function(err,req,res,next){
// Do Stuff
});
我该如何获取错误的HTTP状态码(或者我只需假设它是500)?
谢谢,
Ari
app.use(function(err,req,res,next){
// Do Stuff
});
我该如何获取错误的HTTP状态码(或者我只需假设它是500)?
谢谢,
Ari
next(error)
时,我会放置一个code
属性,以便我的错误处理中间件可以执行res.status(err.code || 500).render('error_page', error);
或类似的操作。但是,您可以自行决定是否希望为通用404错误或仅限于5XX服务器错误使用此方法。当将错误传递给next
回调时,express本身或大多数中间件提供的http状态码非常少。return next(new AlreadyRegistered());
,其中AlreadyRegistered构造函数会将this.code = 409; //Conflict
属性放置在错误实例上,使得错误处理中间件可以发送该409状态码。(在设计方面,是否更好使用错误处理中间件还是在正常路由链期间处理此“正常运行条件”错误是有争议的,但希望此示例具有说明性)。statusCode
属性的精细命名的包装器类。我在几个项目中都使用了这种方法。你可以尝试在路由中定义状态码:
app.get('/force-error', function(req, res) {
res.status(400)
next(new Error('Bad Request.'))
})
然后:
server.use(function serverErrorHandler (err, req, res, next) {
const code = res.statusCode
// if status 200 change to 500, otherwise get the defined status code
res.status(code === 200 ? 500 : code)
// check if it's a ajax request
if (req.xhr)
res.json({
error: {
status: res.statusCode,
message: err.message,
stack: err.stack,
}
})
else
next(err)
})