为什么以下处理程序被标识为404处理程序

时间:2016-12-29 18:04:02

标签: javascript node.js express middleware

我正在查看由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处理函数,对吗?

1 个答案:

答案 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!")
})