我正在查看由express生成器生成的app.js
,并且有以下代码:
app.use('/', index);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
我的问题是为什么最后的中间件函数被识别为在应该返回not found
错误时执行的函数?
是否基于这样的假设:如果调用此函数,则意味着没有其他中间件/路由器函数使用res.send()
完成处理请求,因此对请求不感兴趣,因此可能没有处理程序对于请求?如果是这样,那么最后应该总是添加这个404
处理函数,对吗?
答案 0 :(得分:2)
正如您所说,正如http://expressjs.com/en/starter/faq.html
中所述如何处理404回复? 在Express中,404回复不是 错误的结果,因此错误处理程序中间件将无法捕获 他们。这种行为是因为404响应只是表明了 没有额外的工作要做;换句话说,Express已执行 所有中间件功能和路由,都发现它们都不存在 回应。您需要做的就是添加一个中间件功能 堆栈的底部(在所有其他功能之下)来处理404 响应:
app.use(function (req, res, next) { res.status(404).send("Sorry can't find that!") })