Nuxt 3 build 后启动服务报 500 错误如何排查

文章导读
Nuxt 3 构建后启动报 500 错误,通常是因为生产环境变量缺失或服务器预设配置不匹配。建议优先查看服务端标准错误日志,确认是运行时代码异常还是 Nitro 启动失败,再针对性补充环境变量或调整 preset。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Nuxt 3 构建后启动报 500 错误,通常是因为生产环境变量缺失或服务器预设配置不匹配。建议优先查看服务端标准错误日志,确认是运行时代码异常还是 Nitro 启动失败,再针对性补充环境变量或调整 preset。

先说结论:Nuxt 3 生产环境 500 错误多为运行时配置缺失或服务器兼容性问题,需通过日志定位具体异常堆栈。

  • 先确认:检查启动日志中的 error 堆栈和缺失的环境变量提示
  • 先处理:补全生产环境 .env 文件或修正 nitro.config 配置
  • 再验证:使用 curl 请求接口并监控日志输出确认状态码回归 200

命令速用版

以下命令用于快速重建并查看启动日志,适合本地复现问题:

npm run build
node .output/server/index.mjs
# 查看实时日志
tail -f logs/error.log

为什么会这样

生产构建会移除开发时期的错误边界提示,且环境变量加载机制与 dev 模式不同。Nuxt 3 基于 Nitro 引擎,生产启动依赖 .output 目录下的 server 入口,若运行时缺少依赖或配置,直接返回 500 而不显示详细调试信息。

分步处理

按以下顺序排查,每步操作后需重启服务观察变化:

Nuxt 3 build 后启动服务报 500 错误如何排查

1. 查看服务端日志
启动命令所在的终端窗口会直接打印 stderr 信息,查找 Error 或 Unhandled Promise 关键字。若使用 PM2 守护进程,执行 pm2 logs 查看输出。

2. 核对环境变量
确认 .env 文件已加载或变量已注入容器环境。Nuxt 3 生产环境默认不读取 .env,需通过 process.env 或 runtimeConfig 显式传递。检查 nuxt.config.ts 中 runtimeConfig 配置是否覆盖了默认值。

3. 检查 Nitro 预设
确认 package.json 中 start 命令与部署目标一致。Node 服务器通常使用 node .output/server/index.mjs,若部署到 Docker 或 Serverless 需调整 nitro preset 配置。

Nuxt 3 build 后启动服务报 500 错误如何排查

4. 验证 Node 版本
确保生产环境 Node 版本与构建环境一致,推荐 LTS 版本。版本不一致可能导致 native 模块编译错误。

怎么验证是否生效

使用 curl 或浏览器访问报错接口,观察 HTTP 状态码。同时监控日志文件,确认不再有新的 500 错误堆栈打印。若接口返回预期 JSON 数据且日志无异常,视为修复成功。

常见坑

1. .env 文件未提交或被 .dockerignore 排除,导致容器内缺少密钥。
2. 静态生成(npm run generate)与服务器渲染(npm run build)混淆,前者不需要 Node 服务器启动。
3. 服务器端口被占用,导致 Nitro 启动失败但报错信息不明显。

常见问题

开发环境正常为什么生产环境报 500?

因为 dev 模式有热重载和详细错误遮罩,生产模式代码被压缩且环境变量加载逻辑不同。

Nuxt 3 build 后启动服务报 500 错误如何排查

Docker 部署后一直 500 怎么办?

检查 Dockerfile 是否复制了 .output 目录,并确认容器启动命令指向 index.mjs 且暴露了正确端口。

如何开启生产环境调试日志?

设置环境变量 NODE_ENV=production 并添加 DEBUG=* 或查看 nitro 日志配置开启详细输出。

参考来源

Nuxt 官方文档 - Deployment: https://nuxt.com/docs/getting-started/deployment
Nitro 官方文档 - Deployment: https://nitro.unjs.io/deploy