2015-06-03 64 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'事件中。 –