首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过管道响应Co-Request模块& NodeJs中的文件?

如何通过管道响应Co-Request模块& NodeJs中的文件?
EN

Stack Overflow用户
提问于 2015-04-12 12:51:40
回答 1查看 3.3K关注 0票数 18

我正在使用Co-Request从http url读取压缩文件,我有以下代码从服务器读取。

代码已经可以工作了。但我不知道如何将响应Zip写入文件。

代码语言:javascript
复制
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 );

Co-Request实际上是请求的包装器,我找到了下面的代码来将文件输送到流中。但不确定如何使用带有yield的Co-Request来编写相同的代码。

代码语言:javascript
复制
request.get('http://example.com/img.png').pipe(request.put('http://example.com/img.png'))

请帮助如何使用yield和co-request将响应zip写入文件

EN

回答 1

Stack Overflow用户

发布于 2015-04-21 17:43:06

我认为在从响应中发出数据之后,请求不能通过管道传递

使用请求而不是共同请求,写一个承诺来实现这一点

代码语言:javascript
复制
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);
});
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29586071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档