温馨提示×

Ubuntu Nodejs日志为何报错

小樊
44
2026-07-10 03:47:01
栏目: 编程语言

Ubuntu 上 Node.js 日志报错 的原因非常多,不能一概而论。下面我按最常见原因 → 排查方法 → 示例给你一个系统性的排查思路。如果你愿意,也可以把具体报错日志贴出来,我可以精准分析。


一、最常见 Node.js 报错原因(Ubuntu 环境)

1️⃣ Node.js 版本不兼容

现象

SyntaxError: Unexpected token ...

node: bad option

原因

  • Ubuntu 自带 Node 版本太旧
  • 使用了新语法(如 ??、可选链 ?.

解决

node -v

推荐安装 LTS:

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

2️⃣ 端口被占用(最常见)

日志示例

Error: listen EADDRINUSE: address already in use :::3000

原因

  • 端口已被其他进程占用

解决

lsof -i:3000
kill -9 <PID>

或修改端口:

app.listen(4000)

3️⃣ 权限不足(Ubuntu 特有)

日志示例

EACCES: permission denied

常见场景

  • 使用 80 / 443 端口
  • 写日志到 /var/log

解决

sudo setcap cap_net_bind_service=+ep $(which node)

或不用 root 运行:

sudo chown -R $USER:$USER /your/project

4️⃣ 缺少依赖 / node_modules 损坏

日志示例

Error: Cannot find module 'express'

解决

rm -rf node_modules package-lock.json
npm install

如果是全局模块:

npm list -g --depth=0

5️⃣ 环境变量未设置

日志示例

process.env.XXX is undefined

解决 Ubuntu 下:

export NODE_ENV=production

或创建 .env 文件(配合 dotenv):

npm install dotenv

6️⃣ systemd / PM2 日志报错

如果你用 systemd

journalctl -u your-node-service -f

如果用 PM2

pm2 logs
pm2 restart app

7️⃣ 磁盘 / 内存问题

日志示例

ENOSPC: System limit for number of file watchers reached

解决

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

二、快速定位 Node.js 报错的方法

✅ 1. 看完整错误栈

node app.js 2>&1 | tee error.log

✅ 2. 查看 Ubuntu 系统日志

tail -f /var/log/syslog

✅ 3. 确认 Node 运行方式

ps aux | grep node

三、建议你直接这样排查(最省时间)

请直接贴出以下信息之一:

  1. 完整报错日志(最重要)
  2. ✅ 运行方式(直接 node / PM2 / systemd / Docker)
  3. ✅ Node 版本(node -v
  4. ✅ Ubuntu 版本(lsb_release -a

四、举个真实例子

报错

Error: Cannot find module '/app/server.js'

原因

  • 启动路径错误

解决

cd /app
node server.js

node /app/server.js

如果你愿意,把报错原文直接贴出来,我可以一步一步帮你定位 ✅

0