gpt4 book ai didi

javascript - Node.js 等待发出 HTTP 请求的 REST 服务的回调

转载 作者:IT老高 更新时间:2023-10-28 21:55:30 25 4
gpt4 key购买 nike

我正在使用 express 模块在 Node.js 中构建一个 RESTful API。在我的服务中,我正在向外部端点(服务器端)发出额外的 HTTP 请求。我需要将这些 HTTP 请求中的数据返回到我的 Web 服务的请求正文。

关于 Web 服务正在执行的所有操作,通过使用 console.log(),我已确认我获得了所需的数据。但是,当我尝试将这些值返回给服务时,它们会返回值 null。我知道这是因为请求是异步的,并且回调没有等待 HTTP 请求完成。

有没有办法让它工作?

最佳答案

一种常见的做法是使用 async模块。

npm install async

async 模块具有处理各种形式的异步事件的原语。

在您的情况下,async#parallel 调用将允许您同时向所有外部 API 发出请求,然后合并结果以返回给请求者。

由于您正在发出外部 http 请求,您可能会发现 request模块也很有帮助。

npm install request

使用 requestasync#parallel 你的路由处理程序看起来像这样......

var request = require('request');
var async = require('async');

exports.handler = function(req, res) {
async.parallel([
/*
* First external endpoint
*/
function(callback) {
var url = "http://external1.com/api/some_endpoint";
request(url, function(err, response, body) {
// JSON body
if(err) { console.log(err); callback(true); return; }
obj = JSON.parse(body);
callback(false, obj);
});
},
/*
* Second external endpoint
*/
function(callback) {
var url = "http://external2.com/api/some_endpoint";
request(url, function(err, response, body) {
// JSON body
if(err) { console.log(err); callback(true); return; }
obj = JSON.parse(body);
callback(false, obj);
});
},
],
/*
* Collate results
*/
function(err, results) {
if(err) { console.log(err); res.send(500,"Server Error"); return; }
res.send({api1:results[0], api2:results[1]});
}
);
};

您还可以阅读其他回调排序方法 here .

关于javascript - Node.js 等待发出 HTTP 请求的 REST 服务的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16866015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com