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

如何实现两个简单Node应用的相互通信,返回对方提供的响应内容?

实现方案

你之前用redirect不符合需求的核心原因是:redirect是返回302状态码让客户端主动跳转到另一个地址,地址栏会发生变化,本质是两次客户端请求。而需求要求的是当前应用的服务端主动拉取另一个应用的内容,再作为当前请求的响应返回,全程只有一次客户端请求,地址栏不会改变。

以下是基于Express的可行实现:

第一步:安装依赖

两个应用的项目目录下分别执行以下命令安装依赖:
npm install express node-fetch@2
这里选用node-fetch@2版本是因为它兼容CommonJS语法,无需修改项目模块配置,使用更简便。

第一个应用(监听端口3003)完整代码

const express = require('express');
const fetch = require('node-fetch');
const app = express();

// 暴露给第二个应用调用的接口
app.get('/get-app1-text', (req, res) => {
  res.send('hello from app 1');
});

// 访问根路径时,从第二个应用拉取内容返回
app.get('/', async (req, res) => {
  try {
    const response = await fetch('http://localhost:3002/get-app2-text');
    const resultText = await response.text();
    res.send(resultText);
  } catch (error) {
    res.status(500).send('请求第二个应用失败,请确认第二个应用已正常启动');
  }
});

app.listen(3003, () => {
  console.log('第一个应用启动完成,监听端口3003');
});

第二个应用(监听端口3002)完整代码

const express = require('express');
const fetch = require('node-fetch');
const app = express();

// 暴露给第一个应用调用的接口
app.get('/get-app2-text', (req, res) => {
  res.send('hello from app 2');
});

// 访问根路径时,从第一个应用拉取内容返回
app.get('/', async (req, res) => {
  try {
    const response = await fetch('http://localhost:3003/get-app1-text');
    const resultText = await response.text();
    res.send(resultText);
  } catch (error) {
    res.status(500).send('请求第一个应用失败,请确认第一个应用已正常启动');
  }
});

app.listen(3002, () => {
  console.log('第二个应用启动完成,监听端口3002');
});

效果验证

先启动第二个应用,再启动第一个应用:

  • 访问http://localhost:3003,返回内容为hello from app 2
  • 访问http://localhost:3002,返回内容为hello from app 1

如果你不想引入第三方依赖,也可以用Node内置的http模块替换node-fetch实现服务端请求,逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:57:02