2016-09-25 6 views
1

ノードを使用してリモートzipファイルをディスクに保存できません。 私はrequestライブラリを使用してリクエストしています。要求が成功した場合は、ディスクに書き込むために、zipファイル を要求します。 エラー処理とファイルの正しい書き換えを正しく組み合わせることができません。node.js.要求されたzipファイルをディスクに保存する際の問題

私は次の操作を実行したい:

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')); 
}); 

私は、要求が直接として次の私ができるパイプを知っているが、私はまともなエラー処理を取得することはできません。エラーコールバックの404エラーのために発生しません、と私は要求をキャッチした場合と!response.ok空の出力ファイルがまだディスク

request.get('https://example.com/example.zip', { 
    'auth': { 'bearer': accessToken }, 
    }) 
    .on('error', handleError) 
    .pipe(fs.createWriteStream('./output.zip')); 

答えて

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()は問題なく、ドロップインの代替品です。

はまた、私は非常に404

+0

おかげで失敗ためのオプションを持っているrequest-promise moduleをチェックアウトをお勧めします。追加のヒントのための歓声も、それらをチェックします.. – patnz

関連する問題