确保系统安装的Node.js版本与应用程序要求的版本匹配(如应用需要Node.js 14.x,而当前安装的是16.x可能导致兼容性问题)。使用以下命令查看版本:
node -v
npm -v
若版本不符,推荐使用**nvm(Node Version Manager)**管理多版本Node.js(避免系统级安装冲突):
# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
source ~/.bashrc # 使nvm生效
# 安装指定版本Node.js(如14.x)
nvm install 14
# 切换至该版本
nvm use 14
此方法可灵活切换版本,解决因版本不兼容导致的运行错误。
Cannot find module 'express'),需进入项目根目录重新安装依赖:rm -rf node_modules package-lock.json # 删除旧依赖和锁文件(避免缓存问题)
npm install # 重新安装所有依赖
ERESOLVE unable to resolve dependency tree),可使用--legacy-peer-deps忽略peer依赖冲突:npm install --legacy-peer-deps
确保package.json中的依赖版本与应用兼容。
若应用启动时报错“Error: listen EADDRINUSE :::3000”(端口3000已被占用),需:
sudo lsof -i :3000 # 替换为实际端口号
kill -9 <PID> # 强制终止进程
const port = process.env.PORT || 3001; // 使用环境变量或默认端口3001
app.listen(port, () => console.log(`Server running on port ${port}`));
确保端口未被其他服务(如Nginx、Apache)占用。
若运行时报错“/lib64/libm.so.6: version `GLIBC_2.27’ not found”(系统glibc版本过低,无法支持当前Node.js版本),需:
sudo yum update glibc # 通过包管理器升级(部分CentOS版本可能无法升级至所需版本)
nvm install 12
nvm use 12
避免因glibc版本不匹配导致的崩溃。
若运行时报错“Permission denied”(如无法访问文件/目录或绑定端口80等特权端口),需:
nginx或当前用户)读写权限:chmod -R 755 /path/to/app # 允许所有者读写执行,其他用户读执行
chown -R nginx:nginx /path/to/app # 修改所有者(根据实际用户调整)
authbind工具或修改端口(如3000)绕过权限限制:sudo yum install authbind # 安装authbind
sudo touch /etc/authbind/byport/80 # 创建80端口授权文件
sudo chmod 500 /etc/authbind/byport/80 # 设置权限
sudo chown <user> /etc/authbind/byport/80 # 设置所有者(<user>为当前用户)
并在代码中绑定80端口:
app.listen(80, () => console.log('Server running on port 80'));
确保应用有足够权限访问所需资源。
日志是定位错误的关键,需:
logs/error.log),使用tail命令实时查看最新错误:tail -f /path/to/app/logs/error.log
/var/log/messages或journalctl):sudo journalctl -xe # 查看系统日志(CentOS 7+)
sudo tail -n 50 /var/log/messages # 查看系统日志(CentOS 6)
日志中通常包含错误堆栈、触发时间及具体原因(如内存溢出、未捕获异常)。
若日志无法定位问题,可使用调试工具逐步排查:
node inspect启动调试模式,通过Chrome浏览器连接调试:node inspect app.js # 启动调试
然后在Chrome中访问chrome://inspect,点击“Open dedicated DevTools for Node”进行断点调试。launch.json),或使用ndb(Node.js专用调试工具):npm install -g ndb
ndb app.js
通过调试可快速定位语法错误、未捕获异常或逻辑问题。
PM2可管理Node.js应用的启动、停止、重启,并自动重启崩溃的应用,同时记录日志:
# 全局安装PM2
sudo npm install pm2 -g
# 启动应用(假设入口文件为app.js)
pm2 start app.js --name "my-app"
# 查看应用状态
pm2 list
# 查看应用日志
pm2 logs my-app
# 设置开机自启
pm2 startup
pm2 save
PM2可避免因应用崩溃导致的服务中断,并方便管理多个Node.js进程。