ama*_*maz 18 javascript node.js ecmascript-6 co es6-promise
我正在使用Co-Request 从http url读取Zip文件,我有以下代码从服务器读取..
代码已经有效了.但我不知道如何将响应Zip写入文件.
var co = require( "co" );
var request = require( "co-request" );
var options = {
url: "http://www.example.com/sample.zip",
headers: {
'Token': Appconfig.Affiliate_Token,
'Affiliate-Id' : Appconfig.Affiliate_Id
}
}
console.log( "Downloading : zip file" );
var j = yield request( options );
Run Code Online (Sandbox Code Playgroud)
Co-Request实际上是Request的包装器,我发现下面的代码要管道传输文件.但不确定如何使用带有yield的Co-Request来编写相同的内容.
request.get('http://example.com/img.png').pipe(request.put('http://example.com/img.png'))
Run Code Online (Sandbox Code Playgroud)
请帮助如何使用yield和co-request将响应zip写入文件
小智 6
我认为请求从响应中发出数据后才能管道化
使用请求而不是共同请求,写一个承诺来实现这一点
var co = require('co');
var request = require('request');
var fs = require('fs');
var url = 'http://google.com/doodle.png';
var requestPipToFile = function(url, filepath) {
return new Promise(function(resolve, reject) {
try {
var stream = fs.createWriteStream(filepath);
stream.on('finish', function() {
console.log("pipe finish");
return resolve(true);
});
return request(url).pipe(stream);
} catch (e) {
return reject(e);
}
});
};
co(function*() {
var value = (yield requestPipToFile(url, './outfile'));
return value;
}).then(function(value) {
return console.log(value);
}).catch(function(err) {
return console.error(err);
});
Run Code Online (Sandbox Code Playgroud)