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

Node.js中Express的app.get通配符失效问题求助

解决Express部署Vue Router历史模式下非根路径404问题

问题原因

Vue Router使用history模式时,直接访问/home、/login这类非根路径,服务器会尝试寻找对应静态文件,找不到就返回404。需要让服务器将所有非API的GET请求都返回index.html,交由Vue Router前端处理路由。你的代码存在两个核心问题:

  • 中间件顺序错误,导致通配符路由无法生效
  • sendFile的路径写法错误,无法正确返回入口文件

修复方案

1. 确认Vue项目配置

确保Vue Router已开启history模式(src/router/index.js中):

const router = createRouter({
  history: createWebHistory(), // 必须是history模式,而非hash模式
  routes: [...]
})

2. 修改Express服务器代码

调整中间件顺序,修正sendFile路径,添加正确的通配符GET路由:

/* eslint-disable no-console */
// server.js
const express = require('express');
const path = require('path');
const serveStatic = require('serve-static');

const app = express();
const router = express.Router();

const port = 80;

const { Logger } = require('./src/logging/Logger.js');
const { Request } = require('./src/requests/requests.js');

//new logger instance
var log = new Logger();

// 1. 先处理API请求,避免被静态文件或前端路由拦截
app.use(express.json())
app.post('/api/*', async (req, res) => {
    var request = new Request();
    request.callBackend(req.url, JSON.stringify(req.body), (rawResponse) => {
      const response = JSON.parse(rawResponse)
      res.status(response.status).send(response.content)
    });
});

// 2. 挂载静态文件服务,处理dist目录下的静态资源
const distPath = path.join(__dirname, '../../dist');
app.use(serveStatic(distPath));

// 3. 所有非API的GET请求,返回index.html,交由Vue Router处理
app.get('/*', (req, res) => {
  res.sendFile(path.join(distPath, 'index.html'));
});

// 处理500错误
app.use((err, req, res, next) => {
  log.error(err.stack);
  res.status(500).send('Something went wrong!');
});

// 启动服务器
app.listen(port, () => {
  log.info(`Vue App is served on port ${log.highlight(port)}`);
  log.info('Directory for vue app: ' + distPath);
});

关键修复点说明

  • 路由顺序:先处理API请求,再处理静态文件,最后处理前端路由。Express按顺序匹配路由,确保API请求不会被后续中间件拦截。
  • 正确的文件路径:用path.join拼接绝对路径,避免因操作系统路径分隔符差异导致的错误。
  • 通配符GET路由:仅匹配GET请求,不会影响POST等其他方法的API请求,确保后端接口正常工作。

内容的提问来源于stack exchange,提问作者CØDƐX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:22:58