在表达式/ nodejs中附加响应流

时间:2016-04-07 13:39:23

标签: node.js express

我在使用ExpressJs回复发送流时遇到困难。有人可以调查它并帮助我理解我在这段代码中犯了哪些错误吗?

这是我发回的.mp4文件。

另外,我有一个我想在Mongo Grid中读取的文件,如下所示

    { "_id" : ObjectId("5702b22fc327277b338a4229"), "filename" :      **"vsl_video1.mp4"**, "contentType" : "binary/octet-stream", "length" : 29442776, "chunkSize" : 261120, "uploadDate" : ISODate("2016-04-04T18:28:00.324Z"), "aliases" : null, "metadata" : null, "md5" : "33c0daecaf9d6d84408041dfe5724295" }

这是我的代码,它试图读取此文件并尝试在响应中附加它

    filename = req.params.filename;
    MongoClient.connect(mongoUrl, function(err, db) {
      var gridReadStream, gridfs;
      gridfs = Grid(db, Mongo);
      gridReadStream = gridfs.createReadStream({
        filename: filename
      });
      console.log('after creating the read stream');
      console.log(filename);
      gridReadStream.pipe(res);
      db.close();
      return res.status(200);

当我发布请求时,我可以打印两个控制台日志。我确信readstream工作正常(我测试写入本地文件并且它确实将二进制数据写入该文件),因此由于某种原因,响应无效。

我在这里发布没有任何错误。我看到我的反应永远不会回来,很长一段时间后就会超时。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

来自this answer。也许可以尝试删除res.status(200)或执行以下操作

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

gridReadStream.on('end', function() {
    res.status(200).end();
});

根本不确定,很难