node.js中将请求的zip文件保存到磁盘时出现问

时间:2016-09-25 02:23:38

标签: node.js

我在使用节点将远程zip文件保存到磁盘时遇到问题。 我使用shouldComponentUpdate库来发出请求。我想要一个zip文件, 如果请求成功,请将其写入磁盘。我无法得到很好的组合 纠正错误处理和写入文件。

我想做以下事情:

request

我知道我可以直接按如下方式处理请求,但我无法获得合适的错误处理。错误回调不会触发404s,如果我抓住请求并在request.get('https://example.com/example.zip', { 'auth': { 'bearer': accessToken }, }, function(error, response, body) { // shortcircuit with notification if unsuccessful request if (error) { return handleError() } // I want to save to file only if no errors // obviously this doesn't work because body is not a stream // but this is where I want to handle it. body.pipe(fs.createWriteStream('./output.zip')); }); 空输出文件仍写入磁盘时抛出错误

!response.ok

1 个答案:

答案 0 :(得分:2)

不使用body.pipe(),而是使用response.pipe()

request.get('https://example.com/example.zip', {
  auth: {
    bearer: accessToken
  }
}, (err, res, body) => {
  if (res.statusCode !== 200) { // really should check 2xx instead
    return handleError();
  }
  res.pipe(fs.createWriteStream('./output.zip');
});

这里的缺点是请求模块将缓冲完整的响应。轻松修复...不要使用请求模块。 http.get()很好,是替代品。

此外,我强烈建议您查看request-promise module,其中包含404失败选项。