节点js流正在等待处理

时间:2015-06-03 10:36:54

标签: node.js download streaming

我有以下node路线:

router.route('/resource/:encodedString/:mediaType')
.all(function (req, res) {
    var decoded = jwt.decode(req.params.encodedString, require('../secret')());
    var mediaObject = decoded.mediaObject;

    res.header('content-disposition', 'filename="' + mediaObject.fileName + req.params.mediaType + '"');
    var stream = fs.createReadStream(mediaObject.targetDir + mediaObject.fileName + req.params.mediaType);
    res.pipe(stream);
})

我的客户打电话给我。

然而,这并没有给我我想要的结果,因为一旦调用它,响应就会挂起。

    Accept-Encoding:identity;q=1, *;q=0
Range:bytes=0-
Referer:http://localhost/myProject/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36

导致内容无法显示。

所以我的问题是我做错了什么?

1 个答案:

答案 0 :(得分:1)

你没有结束你的回复,这就是它正在等待的原因。我的建议是在您的可读流的res.end()事件上调用end,例如:

var stream = fs.createReadStream(mediaObject.targetDir + mediaObject.fileName + req.params.mediaType);
res.pipe(stream);

stream.on('end', function () {
  console.log("Reading operation completed.");
  res.end();
});;