如何使用Azure Blob createReadStream检查错误?

时间:2018-06-20 23:13:50

标签: node.js azure azure-storage azure-storage-blobs

当容器和文件存在时,此代码可以正常工作,但是没有错误检查:

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);
  });

}

如何正确连接此流,以便对流进行错误检查?

1 个答案:

答案 0 :(得分:1)

您已正确设置了错误事件,只需删除数据事件并仅使用stream.pipe(res);。事情在我这边起作用。

我得到了与您相反的结果,一旦我使用数据事件,stream会将其内容传递给data,所以它几乎没有内容(零长度流)要写入res 。并且data的类型是缓冲区(或字符串),没有pipe这样的方法。

当没有更多数据要从流中消耗时,将发出End事件,因此,如果将消耗操作放到内部,则不会调用它。

因此,无需显式添加stream.pipe(res);的事件。检查nodejs stream events了解更多详细信息。