Debian环境下 JavaScript 日志常见错误与排查要点
一 错误类型与典型表现
- SyntaxError 语法错误:如缺少括号、引号、分号,或使用了非法/保留字,导致脚本无法解析。
- ReferenceError 引用错误:访问了未声明的变量,例如使用未定义变量或作用域外的标识符。
- TypeError 类型错误:对不符合预期类型的值执行操作,例如读取 undefined/null 的属性。
- RangeError 范围错误:数值或数据结构超出允许范围,例如创建长度为负数的数组。
- URIError URI 错误:调用 encodeURI / decodeURI 等处理非法 URI 时抛出。
- EvalError:与 eval() 使用不当相关,现代代码中较少见。
- 运行时异常:如 Maximum call stack size exceeded(栈溢出),常见于无终止条件的递归或深层调用链。
以上错误类型在 Node.js 与前端运行环境中均常见,日志中通常伴随错误类型、消息与堆栈信息。
二 运行时与环境类错误
- 未处理的异常与流错误:对 Stream 等异步资源未绑定 error 事件,错误会沿事件循环传播并可能导致进程崩溃。
- JavaScript 堆内存不足:处理大数据或存在内存泄漏时触发,表现为内存分配失败或进程被终止。
- 环境/版本不兼容:不同 Node.js 版本或依赖库版本差异导致 API 行为变化或语法不支持。
- 网络通信错误:如 ECONNREFUSED、连接超时、请求被拒绝等,常见于服务间调用或外部 API 访问失败。
- 前端网络请求异常:浏览器控制台显示请求失败(非 200 状态码)、资源加载超时或 CORS 被拒绝。
这些问题在服务器(Node.js)与浏览器端均可能出现,需结合日志与网络抓包综合判断。
三 日志定位与排查步骤
- 定位日志文件:系统日志位于 /var/log/;Web 服务日志在 /var/log/apache2/error.log、/var/log/nginx/error.log;Node.js 应用通常写入应用指定路径或 /var/log/ 下的自定义文件。
- 快速检索:使用 grep/tail 搜索关键字(如 ERROR、Exception、Failed、SyntaxError、TypeError),如:
- tail -f /var/log/syslog | grep ‘TypeError’
- grep -n ‘ReferenceError’ /var/log/nginx/error.log
- 阅读错误上下文:关注时间戳、日志级别、源文件与行号、错误消息及堆栈跟踪,定位触发点。
- 前端与后端联动:前端用浏览器开发者工具查看 Console/Network;后端查看服务日志与反向代理日志,核对请求链路。
- 调试与复现:Node.js 使用 node --inspect-brk 或 VS Code 调试;在测试环境复现并验证修复。
- 依赖与版本:核对 Node.js 与依赖库版本兼容,必要时回退或升级。
- 监控与告警:对高频错误设置监控与告警,便于及时发现与响应。
四 常见错误速查表
| 错误类型 |
典型日志关键词 |
常见原因 |
快速修复 |
| SyntaxError |
SyntaxError: Unexpected token / Invalid or unexpected token |
缺少括号/引号、非法字符、版本不支持的语法 |
修正语法、检查引号与括号配对、确认 Babel/TypeScript 编译是否正确 |
| ReferenceError |
ReferenceError: x is not defined |
变量未声明、作用域/导入错误 |
在使用前声明变量,核对作用域与模块导出/导入 |
| TypeError |
Cannot read property ‘x’ of undefined / null |
访问 undefined/null 的属性或方法 |
增加空值判断或可选链(?.),确保对象已初始化 |
| RangeError |
Maximum call stack size exceeded / Invalid array length |
无限递归、数组长度为负等 |
增加递归终止条件、校验参数范围 |
| URIError |
URIError: URI malformed |
非法 URI 编码/解码 |
校验并规范化输入,使用 try-catch 包裹 encodeURI/decodeURI |
| 未处理的流错误 |
(node) Unhandled stream error |
未监听 stream.on(‘error’) |
为所有流添加错误事件处理,及时释放资源 |
| 堆内存不足 |
JavaScript heap out of memory |
大数据量、内存泄漏 |
优化算法与数据处理、流式处理、增大堆内存或排查泄漏 |
| 网络错误 |
ECONNREFUSED / ETIMEDOUT |
目标服务未启动、端口/防火墙问题、超时 |
检查服务状态与网络连通性、调整超时与重试策略 |