在显式结束响应时调用Express.js下一个中间件层

express.js next middleware tier being called when explicitly ending the response

本文关键字:js Express 下一个 中间件 调用 结束 响应      更新时间:2023-09-26

我遇到了以下行为:

当我挂载了多个express中间件时,请求继续向下级联到下一个中间件,即使我通过在前一个中间件中使用res.json()显式地结束请求。还要注意,我没有在上述中间件的任何地方调用next()

app.use('/v1/status', function (req, res, next) {
    res.json({ status: 'ok' });
});
app.use(function (req, res, next) {
    console.log('I always get called');
});

这是"新"行为吗?因为根据我的理解(和4x文档),这是不应该发生的。

任何帮助都将非常感激。

express v4.13.0 on Mac OSX

所以我在了不起的@dougwilson的帮助下发现了这个问题。他建议我打印被请求的url,我看到/favicon.ico正在打印。

仔细检查后,我看到第一个中间件实际上完成了请求,但是图标请求仍然挂起。这就是第二个中间件被调用的原因。这与res.json()不能正常工作无关。

从来没有遇到过这个问题,它让我发疯了!谢谢大家的帮助!