我在使用节点将远程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
答案 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失败选项。