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>回退到之前的穩定版本,確認問題是否由新代碼引入。