Node.js 中的错误类
Node.js 从 JavaScript < Error > 类继承 JavaScript 和系统错误,并保证提供该类可用的属性。使用由 JavaScript 提供的try...catch构造处理的 throw 机制立即抛出错误的 JavaScript 异常。
Node.js 处理应用程序运行期间发生的错误,支持多种错误机制,即如何报告和处理所有这些错误取决于错误类型和API样式。应用程序代码也可以触发用户指定的错误。 Node.js 生成的所有错误都是实例或继承自 Error 类。在 Node.js 中,它在运行下面给出的应用程序时会遇到多种类型的错误:
类:AssertionError: AssertionErrors由 < errors.Error > 类扩展。当它检测到发生了不应发生的异常逻辑违规时,就会触发这些错误,并且断言模块会引发所有这些错误。 assert 模块抛出的所有错误都是AssertionError类的实例。
示例 1:文件名:index.js
// Node.js program to demonstrate
// Assertion error in JavaScript
// Importing Assert module
const assert = require('assert');
console.log("Throws Assertion Error...");
// Comparing equality using assert
assert.strictEqual(
{'Alfa':'hi', 'beta':'hello'},
{'Alfa':'hi', 'beta':'hello'}
);
// Throws AssertionError
使用以下命令运行index.js文件:
node index.js
输出:
Throws Assertion Error
>> Throws Assertion Error…
>> assert.js:101
throw new AssertionError(obj);
AssertionError [ERR_ASSERTION]: Values have same structure but are not reference-equal:
{ Alfa: ‘hi’, beta: ‘hello’} at Object.
类: RangeError:它表明提供的参数不在可接受的值范围内。它可能是一个数字范围,或者在选项集之外。
示例 2:文件名:index.js
// Node.js program to demonstrate
// range error in JavaScript
// Importing http module
const http = require('http');
// Creating server with port no
// out of range
var server = http.createServer()
.listen(46456656, (err, res)=>{
// Throws Range Error
});
输出:
Throws Range Error
>> internal/validators.js:192
throw new ERR_SOCKET_BAD_PORT(name, port);
RangeError [ERR_SOCKET_BAD_PORT]: options.port should be >= 0 and < 65536. Received 46456656……. code: ?[32m’ERR_SOCKET_BAD_PORT’?[39m}
类:ReferenceError:它指定没有定义任何人试图访问的变量。此类错误指定代码中的拼写错误或程序损坏。 ReferenceError的实例指定代码中的错误,直到应用程序动态运行代码。
示例 3:文件名:index.js
// Node.js program to demonstrate
// Reference error in JavaScript
try {
const alfa = 10;
const beta = alfa + gamma;
// Throws with a ReferenceError
// because gamma is undefined
} catch (err) {
console.log(err.message);
console.log(err);
// Handle the error here.
}
输出:
Throws Reference Error
>> gamma is not defined
>> ReferenceError: gamma is not defined
at Object.
类: SyntaxError:它指定程序不是有效的 JavaScript,它可能是代码评估的结果。这些错误大多是由于 eval、 函数、require 或 vm 而发生的。
示例 4:文件名:index.js
// Node.js program to demonstrate
// Syntax error in JavaScript
try {
// Import vm module
require('vm').runInThisContext('alfa @ beta');
} catch (error) {
// Prints a Syntax Error.
console.log(error);
}
输出:
Throws Syntax Error
>> alfa @ beta
>> SyntaxError: Invalid or unexpected token
at new Script (vm.js:99:7)……at internal/main/run_main_module.js:17:47
类:SystemError: Node.js 生成的系统错误是由于其运行时环境中的异常而发生的。当应用程序违反操作系统约束时,可能会出现这些错误。
示例 5:文件名:index.js
// Node.js program to demonstrate
// Reference error in JavaScript
// Importing fs module
const fs = require('fs');
// Callback function
function errorCallback(err, data) {
if (err) {
console.error('There was an error', err);
return;
}
return(data);
}
// Trying to read file that does not exist
fs.readFile('/some/non-existing/file', errorCallback);
输出:
Throws Error
>> There was an error [Error: ENOENT: no such file or directory, open ‘C:\some\non-existing\file’] {
errno: -4058,
code: ‘ENOENT’,
syscall: ‘open’,
path: ‘C:\\some\\non-existing\\file’}
类:TypeError:它指定提供的参数不是允许的类型。例如,调用一个实际上不存在的函数将是一个 TypeError。就好像表单是参数验证一样,它会立即抛出 TypeError 实例。
示例 6:文件名:index.js
// Node.js program to demonstrate
// Type error in JavaScript
try {
if(1) {
if(2) {
console.loo('alfa')
}
}
} catch (error) {
console.log(error);
}
使用以下命令运行index.js文件:
node index.js
输出:
Throws Type Error
>> TypeError: console.loo is not a function
at Object.
参考: https://nodejs.org/api/errors.html#errors_class_assertionerror