检查Express是否已发送/结束res。

7

使用 Express,如何确定响应已发送 / 响应已完全写入?

app.use((req,res,next) => {

   if(res.ended){
     //
   }

   if(res.finished){
     //
   }

});

我该如何判断res.end()是否已被调用?我需要在res中读取一个布尔值。

1
请记住,编程Express的通常方式是在调用res.send()之后不要调用next(),因此像您上面展示的中间件放置在中间件链的末尾永远不会被调用。 - jfriend00
感谢 @jfriend00 的提示,听起来大概就是这样。 - user11810894
2个回答

11

使用 res.writableEnded文档)。

res.finished 已被弃用(参见)。


嗯,res.writableEnded在我最新的(2022)Express和最新的node(16)中无法工作。 - Vasyl Boroviak

4

response.end()方法在被调用时,如果已经结束请求,则会设置response.finished属性,具体请参考官方文档


如果响应从另一侧关闭了怎么办? - Tomáš Zato
我不确定Express的当前行为是什么,所以您可能需要进行实验。据我所知,会发出不同的事件并且不会再进行进一步的回调,但每个回调都可以运行到完成。 - tadman
4
res.finished已被弃用,您可以根据需要使用response.writableEnded或request.writableFinished。 - AndyJRR
1
如果这个答案已经过时了,而你知道在当前的Express中它是如何工作的,那么发表另一个答案可能会很有价值。 - tadman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接