gpt4 book ai didi

node.js - 为什么响应已关闭且未完成?

转载 作者:搜寻专家 更新时间:2023-10-31 22:45:33 24 4
gpt4 key购买 nike

我在 node.js 的函数 readFile 中有以下代码:

      res.setHeader("content-type", 'application/octet-stream');
res.setHeader("Content-Disposition", 'attachment; filename="' + 'original' + '"' + "; filename*=UTF-8''" + 'original' + "");
var readStream;
var exists = fs.existsSync(fullPath);
if (exists) {
callback(true);
readStream = fs.createReadStream(fullPath);
readStream.pipe(res);
} else {
callback(false);
return;
}
res.on('finish', function(){
logger.info('response ending');
readStream.close();
})
res.on('close', function(){
logger.info('response close');
readStream.close();
})
res.on('error', function(error){
logger.info(error);
readStream.close();
})

出于某种原因,某些请求会发出 close 事件,而其他请求会发出 finish。据我了解,出现问题时会发出 close

关闭事件可以在 2 秒到 2 分钟之间触发。在极少数情况下,不会发出任何 closefinish 事件,请求“卡住”,等待响应。

有些请求会成功,而有些请求不会成功的原因是什么?

编辑

我怎么知道为什么会发出关闭事件?这是客户端问题还是我的应用程序中的错误?

最佳答案

如果有 finish 则一切正常,但如果有 close 则可能是因为任何原因。在管道完成之前,我尝试按照您的事件声明执行代码。

1. `res.emit('close');`  And
2. `readStream.close();`

现在这里的第一个显式发出关闭事件,第二个关闭通过管道传输的 readStream。这两个语句都会触发 res.on('close'),但我无法真正找到 close 的原因。

我不能确定是服务器bug还是客户端bug,但可能有以下原因:

  1. res.emit('close'); 明确发出关闭事件。

  2. 管道源出了点问题。 (例如,在上述情况 #2 中,readStream 已关闭)在这种情况下,它会比其他原因花费更长的时间。

  3. 响应发送开始后网络中断

  4. 客户端也可以触发关闭事件,如果它请求数据,然后客户端不在场接收数据。

原因可能是任何原因,导致响应无法完成。

关于node.js - 为什么响应已关闭且未完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27958991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com