当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在Node.js中的单个HTTP请求中调用多个HTTP请求》经验,为你挑选了1个好方法。

我试图在单个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或一些只有标题的随机输出.

我的目标是在单个节点获取请求中调用多个URL,并将其JSON输出附加到阵列上并发送给最终用户.

谢谢



1> yoogeeks..:

在这里,试试这个代码,

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);
});

说明: 此代码使用async和请求节点包.async.map通过定义需要3个PARAMS,第一个是一个阵列,第二个是要与该阵列的每个元素,以调用迭代函数,回调函数,当async.map完成处理调用.

map(arr, iterator, [callback])

通过迭代器函数映射arr中的每个值,生成一个新的值数组.使用arr中的项目和完成处理的回调调用迭代器.这些回调中的每一个都有两个参数:一个错误,以及来自arr的转换项.如果迭代器将错误传递给其回调,则会立即调用主回调(对于map函数)并显示错误.

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

在httpGet函数中,您request使用传递的url 调用函数,并明确告知响应格式json.request,当完成处理时,调用三个参数的回调函数,错误 - 如果有的话,服务器响应,身体 - 响应体.如果没有errfrom request,async.map则将这些回调的结果作为数组收集,并将该数组的末尾传递给其第三个回调函数.否则,如果(err)为true,则该async.map函数停止执行并使用a调用其回调err.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有