2015-06-03 61 views
0

我有以下node路线:节点JS流正在等待

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

你没有结束你的回应,这就是为什么它正在等待。我的建议是调用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(); 
});; 
+0

可悲的是这并没有解决这个问题仍悬而未决。另外终​​端函数永远不会被调用 –

+0

管道应该在场景后面做这个操作 –

+0

你可以在'data'事件中放一个'console.log(“something”)',以确保文件正被读取?并且也在'error'事件中。 –