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

如何在同一端口运行不同端点的Express Node.js服务器?

解决同一端口运行多个Express端点的问题

你遇到的问题本质是:两个独立的Express应用都尝试绑定到8000端口,而操作系统不允许同一端口被多个进程同时监听,所以第二个启动的应用会提示端口被占用。

正确的做法是把两个端点整合到同一个Express应用中,或者通过模块化路由拆分保持代码整洁,而不是启动两个独立的服务器。

方案一:合并为单个应用

把两个路由放到同一个Express实例里,只调用一次app.listen()即可:

const express = require("express");
const cors = require("cors");
const app = express();
const axios = require('axios');

app.use(cors());
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
const PORT = 8000;

// 天气预报接口
app.get("/WeatherForcast", function (req, res) {
  axios.get('https://localhost:7173/WeatherForecast')
  .then(response => {
    res.status(200).json({ success: true, data: response.data});
  })
  .catch(error => {
    console.log(error);
    res.status(500).json({ success: false, message: '请求失败' });
  });
});

// 用户数据接口
app.get("/UserData", function (req, res) {
  axios.get('https://localhost:7173/UserData')
  .then(response => {
    res.status(200).json({ success: true, data: response.data});
  })
  .catch(error => {
    console.log(error);
    res.status(500).json({ success: false, message: '请求失败' });
  });
});

app.listen(PORT, function () {
  console.log(`Server is running on ${PORT}`);
});

启动这个应用后,就能同时通过localhost:8000/WeatherForcast和localhost:8000/UserData访问两个接口。

方案二:模块化拆分路由(推荐)

如果想保持代码分离,可把不同路由拆成单独模块,再导入到主应用中:

1. 创建routes/weather.js

const express = require('express');
const axios = require('axios');
const router = express.Router();

router.get("/WeatherForcast", function (req, res) {
  axios.get('https://localhost:7173/WeatherForecast')
  .then(response => {
    res.status(200).json({ success: true, data: response.data});
  })
  .catch(error => {
    console.log(error);
    res.status(500).json({ success: false, message: '请求失败' });
  });
});

module.exports = router;

2. 创建routes/user.js

const express = require('express');
const axios = require('axios');
const router = express.Router();

router.get("/UserData", function (req, res) {
  axios.get('https://localhost:7173/UserData')
  .then(response => {
    res.status(200).json({ success: true, data: response.data});
  })
  .catch(error => {
    console.log(error);
    res.status(500).json({ success: false, message: '请求失败' });
  });
});

module.exports = router;

3. 主应用文件(如server.js)

const express = require("express");
const cors = require("cors");
const app = express();
const weatherRoutes = require('./routes/weather');
const userRoutes = require('./routes/user');

app.use(cors());
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
const PORT = 8000;

// 挂载路由模块
app.use(weatherRoutes);
app.use(userRoutes);

app.listen(PORT, function () {
  console.log(`Server is running on ${PORT}`);
});

这种方式既保持了代码的模块化,又只启动一个服务器,彻底避免端口冲突。

补充:如果确实需要运行两个独立Node进程,只能给它们分配不同端口,再通过反向代理(如Nginx)把不同路径转发到对应端口,但这对你的场景来说属于过度设计,完全没必要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:20:22