【发布时间】:2015-11-25 00:50:49
【问题描述】:
我有一个具有文件上传/下载功能的页面。
当我尝试下载文件 AND 取消保存文件提示时,该提示发生在 res.writeHead 部分之后,它会留下标题并等待 res.write 和 res.end 部分。
问题是,如果提示被取消,这些会被转义,从而使其他所有响应都失败,并出现错误“发送后无法设置标题”。
是否有办法以某种方式结束响应捕获已取消的提示事件,或者任何其他方式来避免这种情况?
为文件下载设置标题和流数据的部分(位于/download/:filename路由中调用的函数中)是:
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');
在另一个控制器中,在同一页面中调用。 (我猜如果我重定向到另一个页面标题实际上会被清除?)
*如果我选择下载位置并按确定,则不会出现错误
*我在循环中没有双重响应,以避免这个常见的错误答案:)
【问题讨论】:
-
您使用的是全局 res 对象吗?请给我们看一些代码
-
请添加一些代码
-
感谢您的回答,已更新代码
标签: node.js express mean-stack