在 Node.js 项目中查日志报错,通常可以按下面几个层次来排查,从简单到深入,基本能覆盖 90% 的情况。
如果你是用 node app.js / npm run dev 启动:
node app.js
报错一般长这样:
TypeError: Cannot read properties of undefined (reading 'xxx')
at app.get (/app/routes/user.js:12:34)
✅ 重点看:
TypeError / ReferenceError / SyntaxError| 错误 | 常见原因 |
|---|---|
| TypeError | 变量是 undefined / null |
| ReferenceError | 变量未定义 |
| SyntaxError | JS 语法写错 |
| ENOENT | 文件 / 路径不存在 |
| EADDRINUSE | 端口被占用 |
| ERR_MODULE_NOT_FOUND | import / require 路径错 |
| CORS / 404 | 接口路径或中间件问题 |
常见目录:
logs/
error.log
app.log
查看:
cat logs/error.log
tail -f logs/error.log
pm2 logs
pm2 logs app-name
pm2 logs --err
查看某一天:
pm2 logs --lines 200
docker logs 容器名
docker logs -f 容器名
kubectl logs pod名
console.log(临时)console.log('user:', user)
npm i winston
const winston = require('winston')
const logger = winston.createLogger({
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
})
logger.error('接口报错', err)
process.on('uncaughtException', err => {
console.error('未捕获异常:', err)
})
process.on('unhandledRejection', err => {
console.error('Promise 未处理:', err)
})
app.use((err, req, res, next) => {
console.error(err.stack)
res.status(500).send('服务器错误')
})
✅ 先复现
curl http://localhost:3000/api/xxx
✅ 加日志
console.log('req.body:', req.body)
✅ 看是不是异步问题
try {
await xxx()
} catch (e) {
console.error(e)
}
如果你愿意,直接把**完整报错信息(stack)**贴出来,我可以帮你:
你可以直接发:
报错内容 + 相关代码 + 启动方式