【问题标题】:node request module server crashes when piping invalid url管道无效 url 时节点请求模块服务器崩溃
【发布时间】:2019-07-04 22:17:21
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js express node-request


    【解决方案1】:

    我认为发生的事情是代码试图通过管道传输,尽管 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();
    });
    

    【讨论】:

      猜你喜欢
      • 2022-10-15
      • 1970-01-01
      • 2015-07-23
      • 2015-06-14
      • 1970-01-01
      • 2018-02-13
      • 2017-10-16
      • 1970-01-01
      相关资源
      最近更新 更多