温馨提示×

Nodejs日志报错怎么查

小樊
40
2026-07-07 10:02:11
栏目: 编程语言

在 Node.js 项目中查日志报错,通常可以按下面几个层次来排查,从简单到深入,基本能覆盖 90% 的情况。


一、先看「报错信息本身」

1️⃣ 终端 / 控制台报错

如果你是用 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
  • 出错文件 + 行号
  • 调用栈(stack)

二、常见 Node.js 错误类型速查

错误 常见原因
TypeError 变量是 undefined / null
ReferenceError 变量未定义
SyntaxError JS 语法写错
ENOENT 文件 / 路径不存在
EADDRINUSE 端口被占用
ERR_MODULE_NOT_FOUND import / require 路径错
CORS / 404 接口路径或中间件问题

三、查看「日志文件」

1️⃣ 项目里有没有日志文件?

常见目录:

logs/
error.log
app.log

查看:

cat logs/error.log
tail -f logs/error.log

2️⃣ PM2 启动的项目(很常见)

pm2 logs
pm2 logs app-name
pm2 logs --err

查看某一天:

pm2 logs --lines 200

四、如果是线上 / Docker

Docker

docker logs 容器名
docker logs -f 容器名

Kubernetes

kubectl logs pod名

五、在代码里主动打日志(非常重要)

1️⃣ 用 console.log(临时)

console.log('user:', user)

2️⃣ 用日志库(推荐)

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)
})

七、Express / Koa 中间件里查错

Express

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)**贴出来,我可以帮你:

  • 精确定位是哪一行
  • 告诉你为什么错
  • 给你改法 ✅

你可以直接发:

报错内容 + 相关代码 + 启动方式

0