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

如何在Express的server1 addUser API中调用server2的getUserId API?

在Express的Server1中调用Server2的API获取数据

方案1:使用Node.js内置http模块

Node.js自带的http模块可直接发送HTTP请求,无需额外安装依赖。由于请求是异步操作,需将接口处理函数改为async,并通过Promise封装请求逻辑:

修改后的server1.js代码:

// Server1
const express = require("express");
const http = require("http");
const app = express();

// 封装调用Server2的getUserId接口的函数
const getUserIdFromServer2 = () => {
  return new Promise((resolve, reject) => {
    const req = http.get("http://localhost:3001/api/getUserId", (res) => {
      let data = "";
      res.on("data", (chunk) => {
        data += chunk;
      });
      res.on("end", () => {
        try {
          const userId = JSON.parse(data);
          resolve(userId);
        } catch (err) {
          reject(err);
        }
      });
    });
    req.on("error", (err) => {
      reject(err);
    });
  });
};

app.get('/api/addUser/:userName', async (req, res) => {
  try {
    const userId = await getUserIdFromServer2();
    const user = {
      userName: req.params.userName,
      userId: userId
    };
    // 先定义users数组
    const users = [];
    users.push(user);  
    res.json(`user added: ${JSON.stringify(user)}`);
  } catch (err) {
    res.status(500).json(`Error getting userId: ${err.message}`);
  }
});

app.listen(3000, () => {
  console.log("Listen on the port 3000...");
}); 

方案2:使用第三方库axios

axios是更易用的HTTP请求库,代码更简洁,原生支持Promise和async/await。

步骤:

  1. 安装axios依赖:
npm install axios
  1. 修改后的server1.js代码:
// Server1
const express = require("express");
const axios = require("axios");
const app = express();

app.get('/api/addUser/:userName', async (req, res) => {
  try {
    // 调用Server2的getUserId接口
    const response = await axios.get("http://localhost:3001/api/getUserId");
    const userId = response.data;
    
    const user = {
      userName: req.params.userName,
      userId: userId
    };
    // 定义users数组
    const users = [];
    users.push(user);  
    res.json(`user added: ${JSON.stringify(user)}`);
  } catch (err) {
    res.status(500).json(`Error getting userId: ${err.message}`);
  }
});

app.listen(3000, () => {
  console.log("Listen on the port 3000...");
}); 

注意事项

  • 确保Server2已在3001端口正常启动,否则Server1的请求会失败。
  • HTTP请求是异步操作,必须通过async/await或回调函数处理,避免出现userId未定义的问题。
  • 务必添加错误处理逻辑,防止请求失败时导致Server1的接口崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:25:19