我遇到了require
节点js库的问题。当我尝试在响应时管道到文件和流时,我收到错误:you cannot pipe after data has been emitted from the response
。这是因为我在真正管道数据之前做了一些计算。
示例:
var request = require('request')
var fs = require('fs')
var through2 = require('through2')
options = {
url: 'url-to-fetch-a-file'
};
var req = request(options)
req.on('response',function(res){
//Some computations to remove files potentially
//These computations take quite somme time.
//Function that creates path recursively
createPath(path,function(){
var file = fs.createWriteStream(path+fname)
var stream = through2.obj(function (chunk, enc, callback) {
this.push(chunk)
callback()
})
req.pipe(file)
req.pipe(stream)
})
})
如果我只是在没有任何计算的情况下管道到流,那就没关系了。如何使用nodejs中的request
模块管道传输文件和流?
我发现了这个:Node.js Piping the same readable stream into multiple (writable) targets但它不是一回事。在那里,管道在不同的刻度中发生2次。这个例子像问题中的答案一样管道,但仍然收到错误。
答案 0 :(得分:0)
您可以向已定义的stream
添加侦听器,而不是直接对文件进行管道传输。因此,您可以将req.pipe(file)
替换为
stream.on('data',function(data){
file.write(data)
})
stream.on('end',function(){
file.end()
})
或
stream.pipe(file)
这将暂停流直到其读取,这是request
模块不会发生的事情。