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没有需要存储在您的服务器上的文件。它只会浪费资源... –