Ubuntu 环境下 JS 日志异常代码含义与排查
一 常见异常类型与含义
- SyntaxError 语法错误:代码无法被解析,如缺少引号、括号不匹配、非法标识等。
- TypeError 类型错误:对不适当类型执行操作,如调用非函数、读取 undefined 的属性。
- ReferenceError 引用错误:访问未声明或未定义的变量/属性。
- RangeError 范围错误:数值或参数超出有效范围,如数组长度为负、toFixed 参数非法。
- URIError URI 错误:encodeURI/encodeURIComponent/decodeURI/decodeURIComponent 参数不合法。
- EvalError eval 错误:与 eval 相关,现代环境已极少抛出。
- Error 通用错误:其他错误类型的基类,通常伴随自定义消息与堆栈。
以上类型在 Ubuntu 上的 Node.js 或前端浏览器控制台日志中均常见。
二 Node.js 运行时常见系统错误码
- EADDRINUSE address already in use :::3000:端口 3000 已被占用。
- EACCES permission denied:权限不足,常见于绑定低位端口或访问受限文件。
- UnhandledPromiseRejectionWarning:存在未处理的 Promise 拒绝,可能导致进程不稳定。
- MaxListenersExceededWarning:事件监听器可能泄漏,默认阈值为 10。
- ENOMEM JavaScript heap out of memory:堆内存不足,默认 V8 堆上限约 1.7GB。
- DeprecationWarning:使用了已弃用的 Node.js API(如旧版 Buffer() 构造函数)。
这些错误码与警告在 Ubuntu 服务器上运行 Node.js 时非常典型。
三 如何快速定位与解读日志
- 定位日志来源
- 直接运行:使用 tail -f logs/app.log 实时查看。
- systemd 服务:使用 journalctl -u your-node-service --since “10 minutes ago”。
- PM2 管理:使用 pm2 logs your-app 或按级别筛选 pm2 logs your-app --lines 50 | grep WARN。
- 解读堆栈跟踪
- 先读“错误类型 + 消息”,再从上到下查看堆栈帧;每个帧包含 文件名:行号:列号,顶部为最近调用。
- 优先聚焦应用代码帧(非 node_modules/依赖),结合上下文变量与入参定位根因。
- 辅助工具
- 使用 ESLint 预检语法/潜在错误;
- 使用 node inspect 或 node --inspect-brk 配合 Chrome DevTools 断点调试;
- 必要时升级 Node.js/npm 并核对依赖版本。
四 典型异常与修复建议速查表
| 异常/代码 |
含义 |
快速修复 |
| SyntaxError |
语法无法解析 |
检查引号/括号/逗号/分号;用 ESLint 预检 |
| TypeError |
类型不匹配 |
在调用前校验类型与入参;避免对 null/undefined 取值 |
| ReferenceError |
访问未定义变量 |
确认变量已声明与初始化;检查作用域与导入 |
| RangeError |
参数/数值越界 |
校验数组长度、数值范围与 API 参数约束 |
| URIError |
URI 编码/解码非法 |
校验 encode/decode 输入为合法 URI 组件 |
| EADDRINUSE |
端口被占用 |
结束占用进程或改用未占用端口;检查服务复用 |
| EACCES |
权限不足 |
以合适权限运行或改用高位端口;修正文件权限 |
| UnhandledPromiseRejectionWarning |
Promise 未处理 |
为所有 Promise 加 .catch() 或用 try/catch;增加全局监听 |
| MaxListenersExceededWarning |
监听器可能泄漏 |
移除重复监听;必要时 setMaxListeners 调整阈值 |
| ENOMEM |
堆内存不足 |
增加 –max-old-space-size;排查内存泄漏与大数据缓存 |
| DeprecationWarning |
使用弃用 API |
按警告指引替换为安全替代(如 Buffer.alloc) |
| 以上条目覆盖了 Ubuntu 上 Node.js 日志中最常见的异常与系统错误码及其处理方向。 |
|
|