gpt4 book ai didi

javascript - 在 Node.js 中的单个 HTTP 请求中调用多个 HTTP 请求

转载 作者:IT老高 更新时间:2023-10-28 23:22:54 25 4
gpt4 key购买 nike

我正在尝试在单个 URL 调用中调用多个 URL,并将其 json 响应推送到一个数组中,然后将该数组发送给最终用户。

我的代码如下所示:

var express = require('express');

var main_router = express.Router();

var http = require('http');

urls = [
"http://localhost:3010/alm/build_tool",
"http://localhost:3010/alm/development_tool",
"http://localhost:3010/alm/project_architecture"];

var responses = [];

main_router.route('/')

.get(function (req, res) {

var completed_requests = 0;

for (url in urls) {

http.get(url, function(res) {

responses.push(res.body);

completed_request++;

if (completed_request == urls.length) {

// All download done, process responses array
}
});
}
res.send(responses);
});

我也尝试过使用 npm 请求模块。当我运行这段代码时,它只返回 NULL 或一些只有标题的随机输出。

我的目标是在单个 Node 获取请求中调用多个 URL,并将其 JSON 输出附加到数组中并发送给最终用户。

谢谢

最佳答案

来,试试这段代码,

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

function httpGet(url, callback) {
const options = {
url : url,
json : true
};
request(options,
function(err, res, body) {
callback(err, body);
}
);
}

const urls= [
"http://localhost:3010/alm/build_tool",
"http://localhost:3010/alm/development_tool",
"http://localhost:3010/alm/project_architecture"
];

async.map(urls, httpGet, function (err, res){
if (err) return console.log(err);
console.log(res);
});

说明:此代码使用 asyncrequest Node 包。 async.map 根据定义需要 3 个参数,第一个是一个数组,第二个是您要使用该数组的每个元素调用的迭代器函数,以及在 async.map 完成时调用的回调函数处理。

map(arr, iterator, [callback])

Produces a new array of values by mapping each value in arr through the iterator function. The iterator is called with an item from arr and a callback for when it has finished processing. Each of these callback takes 2 arguments: an error, and the transformed item from arr. If iterator passes an error to its callback, the main callback (for the map function) is immediately called with the error.

注意:对迭代器函数的所有调用都是并行的。

在您的 httpGet 函数中,您正在使用传递的 url 调用 request 函数,并明确告知响应格式为 jsonrequest,处理完成后调用回调函数,带三个参数,err - 如果有,res - 服务器响应,body - 响应体。如果 request 中没有 errasync.map 将这些回调的结果作为一个数组收集,并在最后传递该数组第三个,回调函数。否则,如果 (err) 为真,async.map 函数将停止执行并使用 err 调用其回调。

关于javascript - 在 Node.js 中的单个 HTTP 请求中调用多个 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34436455/

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