Debian 上 Node.js 日志报错的原因非常多,不能一刀切说“为什么”,通常是下面几类之一。我给你按最常见原因 + 对应日志特征 + 解决思路来梳理,你可以对照自己的报错。
Debian 默认仓库里的 Node 往往很老(如 12 / 14),很多新项目不支持。
典型报错:
SyntaxError: Unexpected token '??'
Cannot use import statement outside a module
解决:
node -v
若 < 16,建议用 NodeSource 安装新版本:
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
报错示例:
Error: listen EACCES: permission denied 0.0.0.0:80
解决:
setcap cap_net_bind_service=+ep $(which node)
报错:
ENOENT: no such file or directory
EACCES: permission denied
常见原因:
/var/www 或 /opt 权限不对解决:
chown -R youruser:youruser /project
报错:
Cannot find module 'express'
MODULE_NOT_FOUND
解决:
rm -rf node_modules package-lock.json
npm install
Debian + ARM / 老旧 glibc 常见
报错:
Error: invalid ELF header
Cannot load native module
解决:
npm rebuild
或换兼容版本依赖
日志查看:
journalctl -u yourapp -e
常见错误:
Executable path is not absolute
Environment variable not set
正确示例:
[Service]
ExecStart=/usr/bin/node /opt/app/index.js
WorkingDirectory=/opt/app
User=node
Environment=NODE_ENV=production
报错:
undefined is not a function
process.env.XXX is undefined
解决:
.envEnvironmentFile=/opt/app/.env
日志:
Killed
heap out of memory
解决:
node --max-old-space-size=512 app.js
或升级内存
如果你愿意,可以直接把完整报错日志贴出来,我可以精准告诉你原因,例如:
node -vcat /etc/os-release)我可以帮你一行一行分析。