插件窝 干货文章 Linux JS日志中常见错误有哪些

Linux JS日志中常见错误有哪些

错误 解决 原因 文件 159    来源:    2025-05-04

在 Linux 环境下,JavaScript 日志中的常见错误通常与运行时环境、依赖管理或代码逻辑相关。以下是分类整理的高频错误类型及解决方案:


1. 模块/依赖错误

  • Error: Cannot find module 'xxx'

    • 原因:Node.js 找不到模块(未安装或路径错误)。
    • 解决
    npm install xxx --save  # 安装依赖
    node -e "require.resolve('xxx')"  # 验证模块路径
    
  • ERR_REQUIRE_ESM

    • 原因:尝试用 require() 加载 ES Module 格式的包。
    • 解决
    import { foo } from 'xxx';  // 改用 ES Module 语法
    

    或在 package.json 中添加 "type": "module"


2. 权限问题

  • EACCES: permission denied
    • 场景:操作文件/目录时权限不足。
    • 解决bash chmod 755 /path/to/file # 调整权限 sudo chown -R $USER /path # 修改所有者(谨慎使用)

3. 内存相关

  • FATAL ERROR: Ineffective mark-compacts near heap limit
    • 原因:Node.js 内存溢出(默认堆内存约 1.7GB)。
    • 解决bash node --max-old-space-size=4096 app.js # 调整内存限制(单位MB) 或优化代码内存使用(如流式处理大文件)。

4. 环境变量问题

  • process.env.XXX is undefined
    • 原因:环境变量未正确设置。
    • 解决bash export API_KEY=value && node app.js # 临时设置 或使用 .env 文件配合 dotenv 包加载。

5. 文件系统错误

  • ENOENT: no such file or directory
    • 原因:文件路径错误或文件不存在。
    • 解决javascript const fs = require('fs'); if (fs.existsSync(path)) { /* 操作文件 */ } // 检查路径是否存在

6. 端口冲突

  • EADDRINUSE: address already in use :::3000
    • 原因:端口被占用。
    • 解决bash lsof -i :3000 # 查看占用进程 kill -9 <PID> # 终止进程 或修改应用端口: javascript app.listen(3001, () => console.log('Port changed'));

7. 语法/运行时错误

  • SyntaxError: Unexpected token

    • 原因:代码语法错误(如 JSON 格式错误、ES6 语法未转译)。
    • 解决:使用 ESLint 或 node -c script.js 检查语法。
  • TypeError: Cannot read property 'xxx' of undefined

    • 原因:访问未定义的属性。
    • 解决:增加空值检查:
    const value = obj?.property;  // 可选链操作符(Node.js 14+)
    

8. 第三方服务错误

  • ETIMEDOUT / ECONNREFUSED
    • 原因:网络请求超时或服务不可用。
    • 解决
    • 检查网络连接。
    • 添加重试逻辑: javascript axios.get(url).catch(err => { if (err.code === 'ECONNREFUSED') retry(); });

9. 日志分析工具推荐

  • 实时监控tail -f /var/log/app.log | grep -i "error"
  • 结构化分析jq(JSON 日志)、awk/sed(文本处理)
  • 日志聚合:ELK Stack(Elasticsearch + Logstash + Kibana)

10. 调试技巧

  • Node.js 调试bash node --inspect app.js # 开启 Chrome DevTools 调试
  • 核心转储分析bash gcore <PID> # 生成核心转储文件 node-heapdump # 内存泄漏分析

通过系统化分类错误类型并结合日志上下文(如时间戳、进程ID),可以快速定位问题根源。建议在关键流程中添加结构化日志(如 log.levelerror.stack),并配合监控工具(如 Prometheus + Grafana)实现主动预警。