一尘不染

为什么在“ res.send”之后执行代码?

node.js

我想知道以下代码的行为背后的机制是什么:

res.send(200, { data: 'test data' });
console.log('still here...');

我的理解是res.send返回 函数,而是 关闭连接/结束请求
。这可以解释为什么我仍然可以在res.send命令后执行代码(我查看了快速源,但它似乎不是异步函数)。

还有其他我可能会想念的东西吗?


阅读 428

收藏
2020-07-07

共1个答案

一尘不染

当然可以end结束HTTP响应,但是它对您的代码没有做任何特殊的事情。

即使您已结束回复,也可以继续做其他事情。

但是,您 无法 做的是利用进行任何有用的操作res。由于响应结束,因此您无法向其写入更多数据。

res.send(...);
res.write('more stuff'); // throws an error since res is now closed

此行为与其他传统框架(PHP,ASP等)不同,其他传统框架将线程分配给HTTP请求并在响应结束时终止线程。如果调用类似ASP的等效函数Response.End,则线程终止并且您的代码停止运行。在节点中,没有线程要停止。
req并且res不会再触发任何事件,但是回调中的代码可以自由继续运行(只要它不尝试调用res需要打开有效响应的方法即可)。

2020-07-07