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

pm2部署Nuxt2项目时serverMiddleware接口404如何解决

故障原因

pm2 以 cluster 模式启动时,若未显式指定项目工作目录,会出现运行时工作目录错位的问题,导致 Nuxt 无法正确解析serverMiddleware配置里的~路径别名,找不到api/contact.js文件,中间件注册失败,对应接口直接返回404。这个问题只会在pm2 cluster模式下触发,本地开发、本地直接node启动生产包时工作目录默认是项目根目录,所以不会复现。

修复步骤
  • 第一步:修改pm2的ecosystem.config.js配置,显式指定项目工作目录的绝对路径,避免路径错位:
module.exports = {
  apps: [
    {
      name: 'App',
      exec_mode: 'cluster',
      instances: 'max',
      // 替换为你服务器上Nuxt项目存放的实际绝对路径,比如/opt/nuxt-demo
      cwd: '/your/project/absolute/path',
      script: './node_modules/nuxt/bin/nuxt.js',
      args: 'start'
    }
  ]
}
  • 第二步:修改nuxt.config.js里的serverMiddleware配置,放弃用~别名,改用Node原生path模块解析绝对路径,从根源避免别名解析歧义。首先在配置文件顶部引入path模块,再调整handler配置:
const path = require('path')

export default {
  // 其他配置项省略
  serverMiddleware: [
    { path: '/api/contact', handler: path.resolve(__dirname, './api/contact.js') }
  ]
}

改完这个配置必须在服务器上重新执行npm run build(或者yarn build)重新构建产物,nuxt.config的改动是构建时生效的,不重新构建不会生效。

  • 第三步:清理pm2旧进程缓存,重新拉起服务。不要直接用restart命令,旧进程的路径缓存不会被清空,按顺序执行以下命令:
# 先删除旧的pm2进程
pm2 delete App
# 用新配置启动
pm2 start ecosystem.config.js
# 保存pm2进程列表,设置开机自启的话会自动拉取这个配置
pm2 save
验证方式

启动后先执行pm2 logs App查看运行日志,确认没有出现Cannot find module xxx/contact.js类的报错,再直接请求接口验证即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:27:20