2013-03-09 69 views
2

如果我定义的错误处理中间件快递,像这样:快速错误处理 - 获取状态代码

app.use(function(err,req,res,next){ 
    // Do Stuff 
}); 

如何得到错误的HTTP状态代码(或做我只是假设的是一个500)?

谢谢
阿里

回答

5

总之,你的代码必须决定根据你的错误处理中间件内处理特定的错误相应的错误代码。

此时不一定会生成HTTP状态码。按照惯例,当我从中间件函数或路由器处理函数调用next(error)时,我将code属性设置为使我的错误处理中间件可以执行res.status(err.code || 500).render('error_page', error);或其他行。但是,您是否希望将这种方法用于常见的404错误或者只有5XX服务器错误或其他方面。表达本身或大多数中间件时,很少有东西会在向next回调传递错误时提供http状态码。

对于一个具体的例子,假设有人试图在我的应用程序中注册一个用户帐户,并且我发现它已经在数据库中注册了,我可能会做return next(new AlreadyRegistered());,其中AlreadyRegistered构造函数会将this.code = 409; //Conflict属性放在错误实例,所以错误处理中间件会发送该409状态码。 (对于这种“正常操作条件”错误,在正常的路由链中处理这个错误是否更好使用错误处理中间件,这在设计方面是有争议的,但希望这个例子是说明性的)。

仅供参考我也建议httperrors npm module它提供了一个statusCode财产的名称包装类。我在一些项目中使用了这个效果很好。