【问题标题】:How can i return response only if one methodcall is completed in node js仅当在节点 js 中完成一个方法调用时,我如何才能返回响应
【发布时间】:2020-12-25 19:39:30
【问题描述】:

我有一个带有 express 应用程序的节点 js。我需要公开一个将返回 http 调用响应的休息端点。无论我尝试什么,它都会在 http 请求之前返回。你能帮忙吗

app.all('/query', function(req, res){
  // here i need to make a http call 
    let urlCall =   new Promise((resolve, reject) => {
        http.get('http://test.com', (response) => {
            let sdata = '';

            response.on('data', (fragments) => {
              sdata += fragments;
            });
        
            response.on('end', () => {
              let response_body = sdata;
              resolve(response_body.toString());
            });
        
            response.on('error', (error) => {
            // promise rejected on error
                reject(error);
            });
        });
    });
    urlCall.then((response) => {
        var responseData=response;
        res.json(responseData);
        res.end();
    }).catch((error) => {
        console.log(error);
        res.end();
    });
}

【问题讨论】:

  • 你为什么用new Promise

标签: javascript node.js express http promise


【解决方案1】:

您的代码应该可以工作,但我怀疑未处理请求错误(您的请求中缺少错误事件处理程序)

您可以尝试将错误处理程序从响应移至请求

app.all("/query", function (req, res) {
  // here i need to make a http call

  let urlCall = new Promise((resolve, reject) => {
    http
      .get("http://test.com", (response) => {
        let sdata = "";

        response.on("data", (fragments) => {
          sdata += fragments;
        });

        response.on("end", () => {
          let response_body = sdata;
          resolve(response_body.toString());
        });
      })
      .on("error", (error) => { // handling request errors
        console.error("error");
        // promise rejected on error
        reject(error);
      });
  });

  urlCall.then(
    (response) => {
      res.json(response);
      res.end();
    },
    (error) => {
      console.log(error);
      res.end();
    }
  );
});


【讨论】:

    猜你喜欢
    • 2022-01-24
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2019-11-13
    • 2021-04-26
    • 1970-01-01
    相关资源
    最近更新 更多