+-
我正在使用uncaughtException
的process
事件来检测错误。提供的错误对象不具有code
属性,但是Node.js documentation表示code
是Error
类的属性。 uncaughtException
提供的错误对象是否与Error
类不同?
0
投票
投票
取决于所捕获的错误,即,并非所有错误实际上都设置了code
属性。考虑以下两个简单示例:
// example 1
const express = require('express')
const app = express();
const port = 3000;
process.on('uncaughtException', (error) => {
console.log(error)
});
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
如果其他端口已经在监听3000端口,则会在控制台上显示以下错误信息:
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (net.js:1298:14)
at listenInCluster (net.js:1346:12)
at Server.listen (net.js:1434:7)
...
at Module.load (internal/modules/cjs/loader.js:790:32)
at Function.Module._load (internal/modules/cjs/loader.js:703:12)
at Function.Module.runMain (internal/modules/cjs/loader.js:999:10) {
code: 'EADDRINUSE',
errno: 'EADDRINUSE',
syscall: 'listen',
address: '::',
port: 3000
}
如您所见,system error EADDRINUSE
设置了代码属性。
另一方面,此>
// example 2 process.on('uncaughtException', (error) => { console.log(error) }); someFunc();
将打印:
ReferenceError: someFunc is not defined ... at Module._compile (internal/modules/cjs/loader.js:936:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:947:10) at Module.load (internal/modules/cjs/loader.js:790:32) at Function.Module._load (internal/modules/cjs/loader.js:703:12) at Function.Module.runMain (internal/modules/cjs/loader.js:999:10) at internal/main/run_main_module.js:17:11
如您所见,ReferenceError没有设置代码属性。