【问题标题】:Why is the following handler identified as 404 handler为什么以下处理程序被标识为 404 处理程序
【发布时间】:2016-12-29 18:04:02
【问题描述】:

我正在查看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 处理函数应该总是最后添加,对吗?

【问题讨论】:

  • 是的,完全正确。这是因为它是最后一个,即没有更多有效路线,因此这一定是一个错误。
  • 是的,和你说的完全一样

标签: javascript node.js express middleware


【解决方案1】:

正如你所说,正如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!")
})

【讨论】:

  • 谢谢,但其他一些中间件函数可能仍会在响应中写入一些内容,对吗?
  • 是的,它可以写入响应并仍然调用next() 以转到下一个处理程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
相关资源
最近更新 更多