我想知道以下代码的行为背后的机制是什么:
res.send(200, { data: 'test data' }); console.log('still here...');
我的理解是res.send不 返回 函数,而是 关闭连接/结束请求 。这可以解释为什么我仍然可以在res.send命令后执行代码(我查看了快速源,但它似乎不是异步函数)。
res.send
还有其他我可能会想念的东西吗?
当然可以end结束HTTP响应,但是它对您的代码没有做任何特殊的事情。
end
即使您已结束回复,也可以继续做其他事情。
但是,您 无法 做的是利用进行任何有用的操作res。由于响应结束,因此您无法向其写入更多数据。
res
res.send(...); res.write('more stuff'); // throws an error since res is now closed
此行为与其他传统框架(PHP,ASP等)不同,其他传统框架将线程分配给HTTP请求并在响应结束时终止线程。如果调用类似ASP的等效函数Response.End,则线程终止并且您的代码停止运行。在节点中,没有线程要停止。 req并且res不会再触发任何事件,但是回调中的代码可以自由继续运行(只要它不尝试调用res需要打开有效响应的方法即可)。
Response.End
req