传递无效网址时,节点请求模块服务器崩溃

时间:2019-07-04 22:17:21

标签: javascript node.js express node-request

我已经为此苦苦挣扎了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返回不起作用吗?

1 个答案:

答案 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();
});