【问题标题】:Writing a generic HTTP request in NodeJS在 NodeJS 中编写一个通用的 HTTP 请求
【发布时间】:2018-04-01 14:01:32
【问题描述】:

我正在制作一个应用程序,该应用程序创建对不同 API 的多个 HTTP 请求,并希望将数据的“发送”和“获取”部分抽象为可以导出的实用程序函数。它应该是异步的。到目前为止,我已经创建了以下内容,但是由于需要在某处声明request.end(),所以它不起作用,而我被困在这里。谢谢!

注意:生成的数据应该能够很容易地返回到其他函数,以便以后使用它进行其他工作。

exports.handleHttpRequests = (url) => {
    return new Promise((resolve, reject) => {
        const request = http.request(url, response => {
            let chunks = [];
            res.on('data', chunk => {
                chunks.push(chunk);
            });

            res.on('end', () => {
                let body = Buffer.concat(chunks).toString();
                resolve(body);
            })
        })
    }).then(data => {
        return data;
    });
}

【问题讨论】:

  • 仅供参考,request-promise 模块已经为您完成了这项工作。
  • 谢谢你,虽然我只想在 vanilla nodejs 中实现它,既可以减少依赖,也可以作为学习经验。
  • 好吧,那就去研究已经为您编写代码的requestrequest-promise 模块的代码。在 node.js 中重写已经为您编写并经过全面测试的代码通常很愚蠢(代码都在 Github 上)。对我来说,这是使用 node.js 的 75% 的原因,这样您就可以在已经为您解决问题的数十万个经过全面测试和调试的模块之上构建。
  • 仅供参考,有一个非常完整的示例(只是没有承诺包装器)in the doc,它向您展示了request.end() 的去向。
  • 我相信您的判断。我将研究 request-promise 并实施它。

标签: javascript node.js rest api http


【解决方案1】:

嘿,你已经完成了所有工作,只需在新的 Promise 回调中调用 request.end() 并处理错误。用 resolve ,reject 做你想做的事。

    exports.handleHttpRequests = (url) => {
  return new Promise((resolve, reject) => {
    const request = http.request(url, res => {
      let chunks = [];
      res.on('data', chunk => {
        chunks.push(chunk);
      });

      res.on('end', () => {
        let body = Buffer.concat(chunks).toString();
        resolve(body);
      })

    });
//handling error
    request.on('error', (e) => {
      reject('problem with request: ' + e.message);
    });
//here you have to put request.end()
    request.end();
  })
};

【讨论】:

  • 您可以删除.then(data => { return data; });,因为这是不必要的。
  • 是的,确实不需要
猜你喜欢
  • 2020-05-03
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
相关资源
最近更新 更多