如何在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。
步骤:
- 安装axios依赖:
npm install axios
- 修改后的
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
相关产品推荐
相关产品推荐

