我已经为此苦苦挣扎了2天:/我正在使用快递请求将外部文件上传到服务器...
var dest = "downloads/imgs";
var filename = "image";
var url = "http://pngimg.com/uploads/spongebob/spongebob_PNG27.png"
var file = fs.createWriteStream(dest + "/" + filename + path.extname(url));
request.get(url)
.on('error', function(err) {
console.log(err);
return;
}).pipe(file);
file.on('error', function(err) {
file.end();
});
file.on('finish', function() {
file.close();
});
这很好。除非我输入了错误的URL,否则我将收到无效的URI错误,并且服务器将崩溃,而不是捕获该错误。知道为什么on.error返回不起作用吗?
答案 0 :(得分:0)
我认为,尽管http请求出现错误情况,但代码正在尝试进行管道传输。仅在良好的下载条件下执行文件I / O ...
var dest = "downloads/imgs";
var filename = "image";
var url = "http://pngimg.com/uploads/spongebob/spongebob_PNG27.png"
let fn = dest + "/" + filename + path.extname(url);
var file = fs.createWriteStream(fn);
request
.get(url)
.on('error', function(err) {
console.log('caught error ' + err);
return;
}) // instead of piping here...
.on('response', function(response) {
response.pipe(file);
console.log(`wrote to ` + fn);
})
file.on('error', function(err) {
file.end();
});
file.on('finish', function() {
file.close();
});