1. 查看错误日志——定位问题的第一步
Node.js应用的错误信息通常记录在日志文件中,需先确定日志位置:
logs文件夹(如app.log、error.log);config.json、settings.js等配置文件中的logPath参数。tail -f /path/to/logfile.log:动态跟踪日志最新内容(实时监控);grep "Error" /path/to/logfile.log:过滤出包含“Error”的日志行(快速定位错误);pm2 logs(若用PM2管理应用):查看所有应用的日志,pm2 logs <app_name>查看特定应用日志。sudo tail -f /var/log/syslog或sudo journalctl -u <service_name>查看。2. 使用调试工具——深入代码执行过程
node inspect your_script.js启动调试模式(--inspect-brk参数可在第一行暂停),然后在Chrome浏览器访问chrome://inspect,点击“Open dedicated DevTools for Node”连接,支持逐行调试、断点设置、变量查看(repl命令可进入REPL模式直接输入变量名查看值)。.vscode/launch.json文件,添加配置:{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/your_script.js"
}
]
}
按F5启动调试,支持断点、变量监视、调用栈查看等功能,更适合复杂项目。nodemon:监控代码变化并自动重启,配合调试模式使用(nodemon --inspect your_script.js);debug模块:通过require('debug')('myapp:server')输出调试信息,用debug.enable('*')开启所有调试日志,避免console.log侵入代码。3. 代码错误处理——捕获未处理的异常
app.js)添加process.on('uncaughtException', (err) => { console.error('Uncaught Exception:', err); process.exit(1); }),捕获未被try/catch处理的同步异常,避免应用崩溃(需记录错误并安全退出)。process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled Rejection at:', promise, 'reason:', reason); process.exit(1); }),捕获未处理的异步Promise拒绝(如async/await未用try/catch包裹的错误)。4. 依赖管理——解决版本冲突
npm ls查看已安装的依赖项及其版本,确认是否存在版本冲突(如lodash的不同版本导致的方法不一致)。node_modules目录和package-lock.json文件,再运行npm install,修复依赖安装错误(如网络问题导致的部分依赖未下载)。npm update更新项目依赖,修复已知bug和安全漏洞(如旧版本Express的CSRF漏洞)。5. 性能与内存问题——定位瓶颈与泄漏
node --prof app.js生成性能分析日志(isolate-0xnnnnnnnnnnnn-v8.log),再用node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt解析,查看函数执行时间占比(如某函数占用过高CPU)。heapdump模块在代码中添加heapdump.writeSnapshot((err, filename) => { console.log('Heap dump written to', filename); }),生成堆快照文件,用Chrome DevTools的“Memory”面板加载分析(查看内存中的对象引用,找出未释放的对象)。pm2的monitor命令(pm2 monitor <app_name>)实时查看内存使用情况,或用memwatch模块监听内存变化(memwatch.on('leak', (info) => { console.log('Memory leak detected:', info); }))。6. 环境与配置检查——排除基础问题
printenv查看当前环境变量,确认NODE_ENV(如development/production)、数据库连接字符串等变量是否设置正确(如NODE_ENV=production node app.js)。config.json)中的参数(如端口号、数据库地址),确认是否与运行环境匹配(如Linux服务器的端口需开放防火墙)。top、htop查看CPU、内存使用情况,用df -h查看磁盘空间(如磁盘空间不足会导致应用无法写入日志或缓存)。7. 版本控制与复现——精准定位问题
git diff查看最近的代码变更,或git checkout <commit_hash>回退到之前的稳定版本,确认问题是否由新代码引入。