Debian 环境下 JS 日志常见错误码含义与定位
一 错误类型与含义
- SyntaxError:语法错误,如缺少括号、引号、分号或花括号不匹配,常见于构建产物或动态拼接的脚本。
- ReferenceError:引用未声明变量,如访问了尚未定义的变量或作用域外的标识符。
- TypeError:对值执行了不适配类型的操作,如读取 undefined/null 的属性、把非函数当函数调用。
- RangeError:数值或参数超出允许范围,如创建长度为负数的数组、递归过深导致栈溢出。
- URIError:encodeURI / decodeURI 等处理非法 URI 时抛出。
- EvalError:与 eval 使用不当相关,现代环境已较少见。
- Node.js 运行时常见:未处理的流错误、堆内存不足(OOM)、网络请求异常(连接中断、超时)、环境或版本不兼容等。
以上类型在 Debian 上的 Node.js 或前端运行环境中均常见,定位思路一致。
二 典型错误与修复建议
| 错误类型 |
典型日志示例 |
可能原因 |
修复建议 |
| SyntaxError |
SyntaxError: Unexpected token ‘{’ |
括号/引号不匹配、缺少闭合、非法字符 |
使用 ESLint/Prettier 检查语法;核对模板/拼接字符串;本地复现后修正 |
| ReferenceError |
ReferenceError: config is not defined |
变量未声明或作用域错误 |
确认依赖注入/导入顺序;在访问前做 typeof/可选链 判断 |
| TypeError |
TypeError: Cannot read property ‘id’ of undefined |
访问了 undefined/null 的属性 |
增加空值保护(如可选链 ?.、默认值 ** |
| RangeError |
RangeError: Maximum call stack size exceeded |
递归过深或无终止条件 |
改写为迭代、增加终止条件、限制递归深度 |
| URIError |
URIError: URI malformed |
非法 URI 编码/解码 |
校验输入,使用 encodeURIComponent/decodeURIComponent 处理组件 |
| Node.js 未处理流错误 |
(node:1234) [ERR_STREAM_DESTROYED] |
流错误未监听 |
为 可读/可写流 添加 error 事件监听,及时销毁/回退 |
| Node.js 堆内存不足 |
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory |
内存泄漏、单次处理数据过大 |
用 –max-old-space-size 临时扩容;排查泄漏(如缓存/闭包);分批处理数据 |
| 网络请求异常 |
Error: connect ECONNREFUSED 127.0.0.1:3000 |
目标服务未启动、端口错误、防火墙 |
检查服务状态与端口、网络连通性、访问控制 |
| 环境/版本不兼容 |
SyntaxError: Unexpected token import |
运行环境 Node 版本过低不支持 ESM |
升级 Node 或改用 CommonJS;在 package.json 设置 “type”:“module” |
| 以上示例与修复思路可快速对应到实际日志,用于定位与修复。 |
|
|
|
三 在 Debian 上定位与排查步骤
- 确认日志来源与输出方式:前端错误多在浏览器 Console 与 DevTools Network;Node.js 错误常见于 stdout/stderr、服务日志(如 journalctl -u your-app)、或文件(如 /var/log/yourapp.log)。
- 快速检索关键错误:
- 查看系统/服务日志:cat /var/log/syslog | grep -i error;journalctl -u your-app -xe
- 在应用日志中检索:grep -n ‘SyntaxError|TypeError|ReferenceError’ /var/log/yourapp.log
- 复现与最小样例:在本地或测试环境用相同 Node 版本与依赖复现;剥离出触发错误的最小代码片段。
- 增强可观测性:接入 ELK Stack(Elasticsearch, Logstash, Kibana) 或 Prometheus + Grafana,对错误率、堆栈、内存指标做可视化与告警。
四 常见 Node.js 错误码与含义
- ERR_STREAM_DESTROYED:流已被销毁仍尝试操作,需为流添加 error 监听并正确处理销毁状态。
- JavaScript heap out of memory:堆内存不足,通常由内存泄漏或大数据一次性加载导致;可短期用 –max-old-space-size 扩容并优化内存使用。
- ECONNREFUSED / ETIMEDOUT:网络连接被拒绝或超时,检查目标服务是否可达、端口是否正确、网络与防火墙策略。
- MODULE_NOT_FOUND:模块未找到,核对 node_modules 安装、依赖版本与 NODE_PATH。
- SyntaxError: Unexpected token import:运行环境不支持 ESM,升级 Node 或改用 CommonJS 并在 package.json 正确设置 “type”。
这些错误码在 Debian 上的 Node.js 应用中非常典型,结合堆栈与事件监听可快速定位。