如果res早期返回,ExpressJS会执行回调链吗?

时间:2014-10-28 19:07:37

标签: node.js express

一个简单的问题,如果我的路由设置有一系列回调,例如

app.route('/myroute').post(callback1, callback2, callback3);

我在每个回调上调用next(),除了最后一个回调。

假设我使用我的' res'在callback2上呈现和发回响应的对象,但我仍然想在callback3上做一些处理,它不需要与客户端交互或返回任何内容。

即使callback1或callback2使用res对象返回响应,我的callback3也会一直执行吗?

做一些测试表明它确实调用了callback3,但有些人说如果res返回响应,expressjs将终止调用链。所以我不想有任何疑问,这里的行为有明确的答案吗?

1 个答案:

答案 0 :(得分:1)

如果您在next()中呼叫callback2,则会执行callback3中的代码。在callback2中唯一“完成”的是HTTP请求。连接将被关闭,因为您已经发送了响应。之后发送回复的任何进一步尝试都将导致:Error: Can't render headers after they are sent to the client.