Ubuntu JS日志中常见错误码及含义解析
Ubuntu系统中JavaScript(尤其是Node.js应用)的日志错误码主要用于标识运行时异常,帮助开发者快速定位问题。以下是常见的错误类型及具体含义:
描述:代码存在语法结构问题(如缺少括号、引号、分号,或使用了无效的符号),导致解析器无法理解代码。
示例:var 1;(变量名不能以数字开头)、function (){}(函数声明缺少名称,若为匿名函数应赋值给变量)。
解决方法:检查代码语法,确保括号、引号、分号等符号匹配,变量/函数命名符合规范。
描述:尝试访问未定义的变量、函数或对象属性(如拼写错误、变量未声明就使用)。
示例:a();(函数a未定义)、console.log(b);(变量b未声明)。
解决方法:确认变量/函数名拼写正确,使用前通过let/const/var声明,避免直接使用未定义的标识符。
描述:对不兼容的数据类型执行操作(如将字符串当作函数调用、访问undefined对象的属性)。
示例:123();(数字123不是函数)、var obj = {}; obj.run();(对象obj没有run方法)、"hello".toFixed(-1)(toFixed参数需为0-20的整数)。
解决方法:检查变量类型,使用typeof或instanceof验证类型,必要时进行类型转换(如Number()、String())。
描述:数值或参数超出有效范围(如数组长度为负数、toFixed()参数超过20)。
示例:[].length = -5;(数组长度不能为负)、var num = 12.34; num.toFixed(-1);(toFixed参数需≥0)。
解决方法:检查数值范围,添加边界条件判断(如if (arr.length >= 0)),避免无效参数传入。
描述:encodeURI、decodeURI、encodeURIComponent等函数的参数包含非法字符(如未编码的空格、特殊符号)。
示例:decodeURI('%E4%B8%AD文');(若参数应为完整URI却包含未编码的中文,可能报错,实际需确保参数是合法URI)。
解决方法:使用函数前对参数进行合法性检查,确保URI格式正确(如用encodeURIComponent编码中文)。
描述:eval()函数执行非法代码(如传入非字符串参数、代码语法错误),仅在ES5及以下版本抛出。
示例:eval(123);(eval参数需为字符串)。
解决方法:避免使用eval(存在安全风险),改用其他方式(如Function构造函数或直接调用函数)。
除上述JavaScript原生错误外,Ubuntu下Node.js应用还可能遇到系统级错误:
/root目录)。Error: EACCES: permission denied, access '/root/config.json'。sudo chmod -R 755 /path/to/dir)或所有者(sudo chown -R your_user:your_group /path/to/dir)。3000端口)。Error: listen EADDRINUSE: address already in use :::3000。sudo lsof -i :3000查看PID,sudo kill -9 <PID>终止)或更换端口(const port = 3001; app.listen(port))。Error: Cannot find module 'express'。npm install express)或检查package.json依赖项是否正确。try...catch捕获同步错误:try {
// 可能出错的代码
JSON.parse('invalid json');
} catch (error) {
console.error('JSON解析错误:', error.message);
}
process.on('uncaughtException')捕获未处理的异常(防止应用崩溃):process.on('uncaughtException', (error) => {
console.error('未捕获异常:', error.stack);
process.exit(1); // 优雅退出
});