2015-07-02 14 views
0

我有一个Express应用程序,我正在使用中间件在我的路由处理程序之后设置响应的格式。因此,在将数据添加到res对象后,我的所有路由都会调用next()来调用格式化程序。表达式4:中间件分支

我想从逻辑上处理404s。但是,我无法轻松使用应用程序中间件,因为我的所有路由处理程序都会调用next();创建一个catchall路线(app.use('*', 404function...))意味着一切都变成了404错误,甚至是正确的路线。

有没有办法判断路由器是否与处理程序中的任何内容不匹配?或者,有没有办法让路由专门调用错误中间件(一个4的函数)?

+0

404处理程序将需要去你的格式化程序,或成为它的一部分。 –

+0

@KevinB我希望它不必成为它的一部分。基本上,它是一个成功处理程序,它以[JSend](http://labs.omniti.com/labs/jsend)格式格式化我的json,除非实际发生错误,否则返回200状态。这就是'next()'调用的内容。在Patrick Murphy的回答中,如果路线不匹配,我可以让404只能通过,而不是一个处理程序覆盖另一个处理程序。 –

+0

他的回答基本上是我的建议,只是在相反的方向。也许我只是不够清楚。基本上,如果你的格式化程序有数据格式化和返回,它会,如果没有,它调用next()。然后你的404和错误处理程序抓住它。 –

回答

2

您可以检查格式器中是否定义了req.route。如果是这样,请求匹配一个路由,您可以格式化响应数据;否则,可以在现场生成404或使用next传递它。

+0

完美运作。我认为有这样的事情,但我没有考虑'req.route' - 我想到任何路由路径都会被定义,因为这就是你所说的。真棒! –