如何链接写入stream,立即与读取stream在Node.js 0.10?

以下行将从指定的urlvariables下载一个图像文件:

 var filename = path.join(__dirname, url.replace(/^.*[\\\/]/, '')); request(url).pipe(fs.createWriteStream(filename)); 

这些行将会把这个图像保存到MongoDB GridFS中:

  var gfs = Grid(mongoose.connection.db, mongoose.mongo); var writestream = gfs.createWriteStream({ filename: filename }); fs.createReadStream(filename).pipe(writestream); 

像这样链接pipe抛出错误:500不能pipe。 不可pipe道。

 request(url).pipe(fs.createWriteStream(filename)).pipe(writestream); 

发生这种情况是因为图像文件尚未准备好被读取,对吗? 我应该怎么做才能解决这个问题?错误:500不能pipe道。 不可pipe道。

使用以下内容: Node.js 0.10.10mongooserequestgridfs-stream库。

 request(url).pipe(fs.createWriteStream(filename)).pipe(writestream); 

是这样的:

 var fileStream = fs.createWriteStream(filename); request(url).pipe(fileStream); fileStream.pipe(writestream); 

所以问题是你试图把一个WriteStream写入另一个WriteStream

 // create 'fs' module variable var fs = require("fs"); // open the streams var readerStream = fs.createReadStream('inputfile.txt'); var writerStream = fs.createWriteStream('outputfile.txt'); // pipe the read and write operations // read input file and write data to output file readerStream.pipe(writerStream); 

我认为链接pipe道的困惑是由于pipe道方法隐含地“自行select”返回的原因。 那是:

 readableStream.pipe(writableStream) // Returns writable stream readableStream.pipe(duplexStream) // Returns readable stream 

但是一般的规则是:“你只能将一个可写stream传送给一个可读stream。” 换句话说,只有可读stream具有pipe()方法。