如何链接写入stream,立即与读取stream在Node.js 0.10?
以下行将从指定的url
variables下载一个图像文件:
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.10 , mongoose , request和gridfs-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()
方法。