温馨提示×

如何解析nodejs错误日志

小樊
34
2026-09-20 20:49:30
栏目: 编程语言

解析 Node.js 错误日志通常包含定位错误来源、理解错误类型、复现问题、修复与预防几个步骤。下面从“看日志 → 懂错误 → 用工具 → 实战技巧”系统讲一下。


一、Node.js 错误日志的基本结构

一个典型的 Node.js 错误日志通常包含:

Error: Cannot find module 'express'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
    at Function.Module._load (internal/modules/cjs/loader.js:728:27)
    at Module.require (internal/modules/cjs/loader.js:1005:19)
    at Object.<anonymous> (/app/index.js:1:17)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)

关键信息

  1. 错误类型Error / TypeError / RangeError
  2. 错误信息Cannot find module 'express'
  3. 调用栈(stack)
    • 从下往上看
    • 最下面是“入口”
    • 最上面是“出错位置”

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

错误类型 含义 常见原因
Error 通用错误 抛出的异常
TypeError 类型错误 undefined.xxx
ReferenceError 变量未定义 拼写错误
SyntaxError 语法错误 代码写错
RangeError 越界 递归过深
ECONNREFUSED 连接失败 服务没起
ETIMEDOUT 超时 网络问题

三、如何“看懂”调用栈(重点)

示例

at Object.<anonymous> (/src/user.js:12:5)
at Module._compile (internal/modules/cjs/loader.js:...)

含义:

  • 错误发生在:/src/user.js
  • 12 行
  • 5 列

第一步永远看:

  • 文件路径
  • 行号
  • 你自己的代码(非 node: 内部)

四、生产环境日志怎么解析

1. 使用结构化日志(强烈推荐)

logger.error({
  message: err.message,
  stack: err.stack,
  userId: req.user?.id
})

工具:

  • winston
  • pino
  • bunyan

2. 捕获全局错误

process.on('uncaughtException', err => {
  console.error('未捕获异常', err)
})

process.on('unhandledRejection', err => {
  console.error('未处理 Promise', err)
})

五、用工具辅助解析日志

1. Sentry(最常用)

  • 自动聚合错误
  • 显示:
    • 用户
    • 浏览器
    • 请求
  • 支持 source map

2. ELK / Loki

  • 日志搜索
  • 关键字过滤
  • 时间线分析

3. 本地调试

node --stack-trace-limit=100 app.js

六、实战解析示例

场景:接口 500

日志:

TypeError: Cannot read property 'name' of undefined
    at getUser (/user.js:20:10)

✅ 分析:

  • /user.js 第 20 行
  • user.name
  • userundefined

✅ 修复:

if (!user) return res.status(404).json({ msg: '用户不存在' })

七、防止“看不懂日志”的最佳实践

✅ 不要吞掉错误

catch (e) { /* 空 */ } ❌

✅ 抛错带上下文

throw new Error(`用户查询失败 userId=${id}`)

✅ 使用 Error.cause(Node 16+)

throw new Error('DB error', { cause: err })

八、如果你愿意,我可以帮你

你可以:

  • 粘贴一段 真实错误日志
  • 说明是 本地 / 生产 / Docker
  • 告诉我使用的 框架(Express / Nest / Koa)

我可以直接帮你逐行解析并给修复方案

0