我想知道以下代码的行为背后的机制是什么:
res.send(200, { data: 'test data' });
console.log('still here...');
Run Code Online (Sandbox Code Playgroud)
我的理解是res.send不返回函数,而是关闭连接/结束请求.这可以解释为什么我仍然可以在res.send命令后执行代码(我查看了快速源代码并且它似乎不是异步函数).
还有什么其他的东西可以让我失踪吗?
jos*_*736 102
当然会end结束HTTP响应,但它不会对您的代码执行任何特殊操作.
即使您已经结束回复,也可以继续做其他事情.
然而,你不能做的是做任何有用的事情res.由于响应结束,您无法向其写入更多数据.
res.send(...);
res.write('more stuff'); // throws an error since res is now closed
Run Code Online (Sandbox Code Playgroud)
此行为与其他传统框架(PHP,ASP等)不同,后者将线程分配给HTTP请求并在响应结束时终止线程.如果你调用ASP之类的等效函数Response.End,则线程终止并且代码停止运行.在节点中,没有要停止的线程. req并且res不会再触发任何事件,但回调中的代码可以自由继续运行(只要它不会尝试调用res需要打开有效响应的方法).
Mar*_*ira 39
编辑:我不再执行下面解释的操作,因为在不需要时不应返回值.它使您的代码可读性降低,看起来很乱.相反,我建议将return语句与res.send().@slavafomin在评论中对此做了很好的解释.
一种停止执行函数并同时发送响应的简单方法就是这样做
return res.send('500', 'Error message here');
Run Code Online (Sandbox Code Playgroud)
这允许您使用简短if语句来处理错误,例如:
if (err) {
return res.send('500', 'Error message here');
}
Run Code Online (Sandbox Code Playgroud)
确切的返回的的res.send函数是一个对象是似乎包含了连接的整个状态,你结束之后(请求,状态,标题等),但是这应该是不重要的,因为你不会做任何事的.
| 归档时间: |
|
| 查看次数: |
35333 次 |
| 最近记录: |