看懂 Node.js 错误日志,核心是把**“堆栈信息 + 错误类型 + 触发场景”**对应起来。下面按实用顺序讲。
一个典型错误日志通常包含:
Error: Cannot find module 'express'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:800:15)
at Function.Module._load (internal/modules/cjs/loader.js:693:27)
at Module.require (internal/modules/cjs/loader.js:915:19)
at Object.<anonymous> (/app/index.js:1:1)
关键部分:
Error: Cannot find module 'express'
/app/index.js:1:1
表示错误源头在 index.js 第 1 行✅ 经验:先读第一行错误描述,再看最靠近你代码的堆栈行
Error: Cannot find module 'xxx'原因
require解决
npm install xxx
或检查:
require('./utils') // 是否正确
TypeError: xxx is not a function原因
示例:
import fs from 'fs'
fs.readFileSync() // ✅
import { readFileSync } from 'fs' // ✅
ReferenceError: xxx is not defined原因
SyntaxError: Unexpected token原因
例如:
import x from 'y' // 但 package.json 没 "type": "module"
ECONNREFUSED / ETIMEDOUT网络类错误
例如:
Error: connect ECONNREFUSED 127.0.0.1:3306
UnhandledPromiseRejectionWarning原因
✅ 推荐写法:
try {
await doSomething()
} catch (err) {
console.error(err)
}
人话描述,最重要
忽略:
node:internal/...
关注:
your-project/src/xxx.js:12:3
问自己:
err.stackcatch (err) {
console.error(err.stack)
}
winstonpino"sourceMap": true
process.on('uncaughtException', console.error)
process.on('unhandledRejection', console.error)
日志:
TypeError: user.getName is not a function
at getUser (/app/user.js:10:5)
分析:
user 不是你以为的对象null✅ 解决:
if (!user || typeof user.getName !== 'function') {
throw new Error('user 数据异常')
}
Node.js 错误日志 = 错误描述 + 调用链 + 你写的代码位置
如果你愿意,可以把一段真实错误日志贴出来,我可以逐行帮你“翻译”。