日志是定位错误的“第一线索”。Node.js应用的日志通常位于项目根目录(如logs/app.log)或系统日志中,可通过以下方式查看:
tail -f /path/to/app.log命令跟踪日志输出,及时捕捉错误信息。systemd),可使用journalctl -u your-nodejs-service-name查看与服务相关的系统级错误。调试工具能深入分析代码执行流程,快速定位问题根源:
node inspect app.js启动调试模式,支持断点、单步执行、变量查看等功能,默认会在浏览器中打开调试界面。.vscode/launch.json文件配置调试参数(如端口号、路径映射),可直接在IDE中设置断点、查看调用栈。错误表现:Error: listen EADDRINUSE :::3000(端口3000已被占用)。
解决方法:
lsof -i :3000,获取进程ID(PID);kill -9 <PID>;const port = process.env.PORT || 3001)。错误表现:Error: Cannot find module 'express'(模块未安装或路径错误)。
解决方法:
npm install express;require路径是否正确(如./utils/helper而非utils/helper);node_modules目录并重新安装:rm -rf node_modules && npm install。错误表现:SyntaxError: missing ) after argument list(括号不匹配、引号未闭合等)。
解决方法:
错误表现:程序突然崩溃,无错误提示或提示UnhandledPromiseRejectionWarning。
解决方法:
process.on('uncaughtException', (err) => { console.error('未捕获异常:', err); process.exit(1); });.catch()或使用async/await配合try/catch:// Promise模式
readFile('a.txt').then(data => console.log(data)).catch(err => console.error('读取失败:', err));
// async/await模式
try {
const data = await readFile('a.txt');
console.log(data);
} catch (err) {
console.error('读取失败:', err);
}
资源不足会导致应用性能下降或崩溃,需通过以下命令排查:
top或htop命令查看进程的CPU、内存占用,若占用过高,需优化代码(如拆分CPU密集型任务)或升级服务器配置。df -h命令查看磁盘剩余空间,若空间不足,清理无用文件(如日志、临时文件)。iostat或cat /proc/{pid}/io查看磁盘I/O情况,若I/O过高,优化数据库查询或文件操作。依赖冲突或未安装会导致应用运行异常,需注意:
npm install安装package.json中定义的所有依赖。npm update更新依赖包,修复已知漏洞;或使用npm audit检查安全漏洞。npm ls <package-name>查看依赖树,手动指定兼容版本(如npm install lodash@4.17.21)。环境变量未设置或路径错误会导致应用无法正常运行:
export API_KEY=your_key),或使用.env文件(需配合dotenv包加载):# .env文件
API_KEY=your_key
PORT=3000
// app.js
require('dotenv').config();
console.log(process.env.API_KEY); // 输出your_key
sudo提升权限(如sudo node app.js),或修改资源权限(如chmod 755 /path/to/dir)。原生console.log难以满足复杂日志需求,可使用第三方库提升日志管理能力:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' }),
new winston.transports.Console({ format: winston.format.simple() }) // 开发环境输出到控制台
]
});
logger.info('Server started on port 3000');
通过以上步骤,可系统性地排查CentOS上Node.js应用的错误。若问题仍未解决,建议查阅Node.js官方文档或在技术社区(如Stack Overflow)寻求帮助,提供详细的错误日志和代码片段以获取更精准的解决方案。