You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js Express路由内调用多个HTTPS请求并合并响应方法

在Express路由中并行发起多个HTTP请求并合并响应

首先明确:request模块已被官方弃用,推荐使用支持Promise的现代HTTP库(如axios或node-fetch),这类库更适配async/await语法,处理多请求并行逻辑更简洁。

实现步骤(以axios为例)

  1. 先安装依赖:
npm install axios
  1. 在路由文件中编写代码:
const axios = require('axios');
const router = require('express').Router();

router.get('/test', async (req, res) => {
  try {
    // 定义需要发起的多个请求,每个请求返回一个Promise
    const requestTasks = [
      axios.get('https://api.example.com/first-data'),
      axios.get('https://api.example.com/second-data'),
      axios.post('https://api.example.com/third-data', { param: 'test' })
    ];

    // 并行执行所有请求,等待全部完成后获取响应数组
    const responses = await Promise.all(requestTasks);

    // 从响应中提取数据,合并为单个JSON对象
    const combinedData = {
      first: responses[0].data,
      second: responses[1].data,
      third: responses[2].data
    };

    // 返回合并后的结果
    res.json(combinedData);
  } catch (err) {
    // 捕获任意请求失败的异常,返回错误响应
    console.error('请求出错:', err);
    res.status(500).json({
      error: '数据获取失败',
      message: err.message
    });
  }
});

module.exports = router;

关键说明

  • Promise.all会并行执行所有传入的Promise,只有当所有请求都成功时才会返回结果数组;如果任意一个请求失败,会直接触发catch块。
  • axios会自动将JSON响应解析为JavaScript对象,直接通过.data访问即可。
  • 如果需要按顺序串行执行请求(效率较低,不推荐),可以逐个await每个请求后再合并结果。

若坚持使用request模块(不推荐)

由于原生request是回调式API,需要使用它的Promise封装版本request-promise:

npm install request-promise

代码示例:

const rp = require('request-promise');
const router = require('express').Router();

router.get('/test', async (req, res) => {
  try {
    const requestTasks = [
      rp.get('https://api.example.com/first-data', { json: true }),
      rp.get('https://api.example.com/second-data', { json: true }),
      rp.post('https://api.example.com/third-data', { json: true, body: { param: 'test' } })
    ];

    // 解构响应结果,直接获取数据
    const [firstData, secondData, thirdData] = await Promise.all(requestTasks);

    res.json({ firstData, secondData, thirdData });
  } catch (err) {
    res.status(500).json({ error: '请求失败', message: err.message });
  }
});

注意:request及request-promise均已停止维护,长期来看建议迁移到axios、node-fetch等活跃维护的库。

内容的提问来源于stack exchange,提问作者reema

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:45:42