Node.js请求下载文件有时为空或不存在

我正在用node.js和请求模块写一个下载器。 使用我正在做的stream语法

var r = request(url).pipe(fs.createWriteStream(targetPath)); r.on('error', function(err) { console.log(err); }); r.on('finish', cb); 

下载文件,保存并调用callback。 但是,在接近50%的情况下,文件是空的或者根本不创build。 没有error事件。 即使文件还没有(完全)写入,看起来finish事件也会被触发。

上下文:整个事情被包装成async.each调用。

任何线索? 谢谢!

在访问文件之前,您需要closures该文件:

 var file = fs.createWriteStream(targetPath); var r = request(url).pipe(file); r.on('error', function(err) { console.log(err); }); r.on('finish', function() { file.close(cb) }); 

顺便说一句,如果URL回复任何HTTP错误(如404未find),这将不会触发“错误”事件,所以你应该可以单独检查:

 function handleFailure(err) { console.log(err); }; var file = fs.createWriteStream(targetPath); request(url, function(error, response) { if (response.statusCode != 200) { console.log("oops, got a " + response.statusCode); return } // close is async, and you have to wait until close completes otherwise // you'll (very rarely) not be able to access the file in the callback. file.on('finish', function() { file.close(cb) }); response.pipe(file).on('error', handleFailure) file.on('error', handleFailure) }).on('error', handleFailure);