取消保存文件提示时如何避免"Can't set headers after they are sent"

How to avoid "Can't set headers after they are sent" when cancelling a save file prompt

我有一个具有文件 uploading/downloading 功能的页面。 当我尝试下载文件 AND 取消保存文件提示时,发生在 res.writeHead 部分之后,它离开 headers 并等待 res.writeres.end 部分。

问题是,如果取消提示,这些将被转义,导致所有其他响应都失败并显示错误 "Can't set headers after they are sent"。

是否有任何方法或任何其他方法来结束捕获已取消提示事件的响应?

为文件下载设置 headers 和流式传输数据的部分(位于 /download/:filename [=37= 中调用的函数中]路线) 是:

res.writeHead(200, {'Content-Type': 'application/octet-stream'});
    var readstream = gfs.createReadStream({
        filename: files[0].filename
    });

    readstream.on('data', function(data){
        res.write(data);
    });

    readstream.on('end', function(){
        res.end();
    });

如果此序列未完成,则其他所有响应均失败。

示例:

res.status(403).send('You have no access to this file');

在另一个控制器中,在同一页面中调用。 (我想如果我重定向到另一个页面 headers 实际上会被清除吗?

*如果我select下载位置然后按确定,不会出现错误

*我没有在循环中有双重响应,以避免这个常见的错误答案:)

在 express 中你可以检查 res.headersSent,这样你就可以避免异常

if(res.headersSent){
  return;
} else {
  //set you headers
}