Node.js日志中常见错误是什么
Node.js日志中常见错误及解决方法
1. 端口占用(EADDRINUSE)
错误表现:启动服务器时抛出Error: listen EADDRINUSE: address already in use :::3000
,提示指定端口(如3000)已被其他进程占用。
解决方法:
- 使用
lsof -i :3000
命令查找占用端口的进程ID(PID),再用kill -9 < PID>
终止该进程; - 更改应用端口号(如将3000改为3001),修改代码中的
app.listen(port)
参数。
2. 模块未找到(Cannot find module ‘xxx’)
错误表现:运行时抛出Error: Cannot find module 'xxx'
,提示无法找到指定的模块(如express
、lodash
或本地文件)。
解决方法:
- 确认模块是否已安装,运行
npm install xxx
安装缺失的模块; - 检查模块路径是否正确(本地模块需使用相对路径,如
require('./utils/helper')
)。
3. 语法错误(SyntaxError)
错误表现:代码存在语法问题,抛出SyntaxError
(如缺少括号、引号不匹配、使用了ES6语法但未启用babel
)。
示例:console.log('Hello, World!'
(缺少右括号)。
解决方法:
- 使用代码编辑器(如VS Code)的语法检查功能提前发现问题;
- 仔细检查代码,修复语法错误(如补全括号、引号,或添加
babel
配置支持ES6+)。
4. 未定义变量(ReferenceError: xxx is not defined)
错误表现:使用未定义的变量时抛出ReferenceError
(如变量名拼写错误、变量未声明)。
示例:console.log(undefinedVar)
(undefinedVar
未定义)。
解决方法:
- 检查变量名拼写是否正确;
- 确保变量在使用前已声明(如
let undefinedVar = 'value';
)。
5. 类型错误(TypeError: xxx is not a function)
错误表现:尝试调用非函数类型的值时抛出TypeError
(如将字符串、对象当作函数调用)。
示例:const result = 'hello'()
(字符串'hello'
不是函数)。
解决方法:
- 检查调用目标的类型,确保其为函数(如
typeof target === 'function'
); - 确认函数名是否正确(如
computeHash
是否拼写错误)。
6. 未捕获的异常(Uncaught Exception)
错误表现:未处理的异常导致应用崩溃,抛出Uncaught Exception
(如异步代码中的错误未被捕获)。
解决方法:
- 添加全局异常处理,捕获未处理的异常并记录日志:
process.on('uncaughtException', (err) => { console.error('Uncaught Exception:', err); process.exit(1); // 强制退出进程,避免应用处于不稳定状态 } );
- 使用
try-catch
捕获同步代码中的异常,异步代码使用async/await
或.catch()
处理。
7. JavaScript堆内存不足(JavaScript heap out of memory)
错误表现:应用消耗过多内存,抛出JavaScript heap out of memory
,提示内存超出默认限制(通常为1.4GB~2GB)。
解决方法:
- 使用内存分析工具(如
heapdump
、clinic.js
)定位内存泄漏(如未释放的缓存、闭包中的大对象); - 优化代码,减少内存使用(如分批次处理大数据集,避免一次性加载全部数据);
- 增加Node.js内存限制,运行时添加
--max-old-space-size
参数(如node --max-old-space-size=4096 app.js
,将内存限制提升至4GB)。
8. 文件或目录不存在(ENOENT)
错误表现:尝试访问不存在的文件或目录时抛出ENOENT: no such file or directory
(如读取日志文件、配置文件失败)。
解决方法:
- 确认文件或目录是否存在,检查路径是否正确(如使用
path.join(__dirname, 'logs/app.log')
构建跨平台路径); - 创建缺失的目录(如使用
fs.mkdirSync(path, { recursive: true } )
递归创建目录)。
9. 权限不足(EACCES/Permission denied)
错误表现:尝试写入日志文件、绑定端口或访问系统资源时抛出EACCES: permission denied
(如Linux系统下普通用户绑定80端口)。
解决方法:
- 检查文件/目录权限,使用
chmod
(修改权限)或chown
(修改所有者)命令调整(如sudo chown -R $USER:$USER /var/log/nodejs
); - 以管理员权限运行应用(如
sudo node app.js
,但不推荐长期使用,建议配置正确的权限); - 绑定端口时选择1024以上的端口(如3000、8080),避免需要管理员权限。
10. 流中未处理的异常(Stream Unhandled Error)
错误表现:处理流(如文件流、HTTP请求流、Socket流)时,未捕获的流错误导致应用崩溃(如文件读取失败、网络连接中断)。
解决方法:
- 为流附加
error
事件处理程序,捕获并处理流中的错误:const fs = require('fs'); const readStream = fs.createReadStream('nonexistent.txt'); readStream.on('error', (err) => { console.error('Stream Error:', err); } );
- 避免在流操作中忽略错误(如未添加
error
监听器)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Node.js日志中常见错误是什么
本文地址: https://pptw.com/jishu/724788.html