当容器和文件存在时,此代码可以正常工作,但是没有错误检查:
function downloadFile(req, res){
var container = 'aaa';
var file = 'bbb';
var stream = blobService.createReadStream(container, file);
stream.pipe(res);
}
我想使用流事件添加错误检查代码,但是当我将管道放入data
事件时,它永远不会被调用,响应也永远不会返回。如果我将其放入end
事件中,则管道将发送长度为零的流。
function downloadFile(req, res){
var container = 'aaa';
var file = 'bbb';
var stream = blobService.createReadStream(container, file);
stream.on('error', function(data){
res.status(400).send({"message": "could not retrieve file"});
});
stream.on('data', function(data){
stream.pipe(res);
});
}
如何正确连接此流,以便对流进行错误检查?
答案 0 :(得分:1)
您已正确设置了错误事件,只需删除数据事件并仅使用stream.pipe(res);
。事情在我这边起作用。
我得到了与您相反的结果,一旦我使用数据事件,stream
会将其内容传递给data
,所以它几乎没有内容(零长度流)要写入res
。并且data
的类型是缓冲区(或字符串),没有pipe
这样的方法。
当没有更多数据要从流中消耗时,将发出End事件,因此,如果将消耗操作放到内部,则不会调用它。
因此,无需显式添加stream.pipe(res);
的事件。检查nodejs stream events了解更多详细信息。