0
我試圖獲取從遠程服務器的PDF文件,並管他們的權利,返回給請求客戶端之前意外關閉象下面這樣:Node.js的readStream writeStream
var writeStream = fs.createWriteStream(filename);
writeStream.on('close', function() {
console.log("Closed write stream");
});
writeStream.on('open', function() {
console.log('Open event for writestream');
});
writeStream.on('pipe', function() {
console.log('pipe event for writestream');
var rd = fs.createReadStream(filename);
rd.on('open', function() {
console.log('Open event for readstream');
});
rd.on('close', function() {
console.log("Closed read stream");
}).pipe(res);
});
request(pQuestURL)
.on('error', function (err) {
console.log(err);
res.json({ status: -1, message: 'Maps error, check your parameters' });
})
.pipe(writeStream);
但它給我的輸出象下面這樣:
pipe event for writestream
Open event for writestream
Open event for readstream
Closed read stream
Closed write stream
我期待readstream
只在writestream
完成後才能完成。 readstream
似乎立即關閉,因此我的客戶端收到一個空的響應,而寫入流只在下載完整的pdf後才結束。我的理解有沒有漏洞?如何在不等待writestream
的finish
事件的情況下向右迴流?
編輯:
其實我可以保存讀取流中的變量和管道它儘可能多的可寫流,因爲我想。我通過簡化如下來完成了我的目標:
var mapRequest = request(pQuestURL);
mapRequest.on('error', function (err) {
console.log(err);
res.json({ status: -1, message: 'Maps error, check your parameters' });
});
mapRequest.pipe(writeStream);
mapRequest.pipe(res);
爲什麼你需要一個writeStream?不能只要求(pQuestURL).pipe(res); ???看起來你的readStream比writeStream更快,因爲writeStream依賴於下載速度... –
你是對的。我可以將可讀流保存在一個變量中,並將其管道化爲儘可能多的可寫。現在編輯我的問題。謝謝 – user3677331
和theres沒有需要存儲在您的服務器上的文件。它只會浪費資源... –