【问题标题】:How to pipe() npm-request only if HTTP 200 is received?仅在收到 HTTP 200 时如何 pipe() npm-request?
【发布时间】:2018-08-22 23:38:57
【问题描述】:

我有以下代码:

let request = require('request');
let fs = require('fs');

request.get('http://localhost:8080/report.rtf')
  .pipe(fs.createWriteStream(__dirname + '/savedDoc.rtf'));

它运行良好,但前提是文档从给定的 URL 成功下载。但是,如果出现任何 HTTP: 403、404 或任何其他错误,则会以零长度保存一个空文件!

我怎样才能.pipe() 这个只有在 HTTP: 200 响应的情况下才使用任何额外的 HEAD 请求?应该可以一口气搞定!

【问题讨论】:

    标签: javascript node.js npm-request node-streams


    【解决方案1】:

    管道前检查.statusCode

    const req = request
      .get('http://localhost:8080/report.rtf')
      .on('response', function (res) {
        if (res.statusCode === 200) {
          req.pipe(fs.createWriteStream(__dirname + '/savedDoc.rtf'))
        }
      })
    

    【讨论】:

    • 这怎么行不通? const req = request.get('http://thewalter.net/stef/software/rtfx/sample.rtf', (error, response, body) => { if(response.statusCode === 200) { req.pipe(fs.createWriteStream(__dirname + '/testDoc.rtf')); } });
    • 没有错误,但如果响应为 200 则保存的文件为空
    • 我猜这个(err,res,body) => {}处理程序被执行时请求流已经关闭了
    • 可能是的。 bodyBuffer 的响应吗?
    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多