nodejs捕获异常
时间: 2023-10-10 15:08:11 浏览: 47
Node.js捕获异常的方式有多种。首先,可以使用try...catch语句块来捕获同步代码中的异常。这意味着在可能抛出异常的代码块之前使用try关键字,并在可能抛出异常的代码块之后使用catch关键字来处理异常。
另一种捕获异常的方式是通过处理异步回调函数中的异常。在Node.js中,大多数异步操作都是通过回调函数来处理的,当发生异常时,回调函数将接收到错误对象作为参数。可以在回调函数中使用try...catch语句块来捕获并处理异常。
除了使用try...catch语句块来捕获异常外,还可以使用事件和Promise来处理异常。Node.js提供了一些内置的事件,如'uncaughtException',可以用来捕获未被捕获的异常。此外,使用Promise可以更灵活地处理异步操作中的异常。
下面是一个示例代码,演示了如何在Node.js中捕获异常:
```javascript
const cluster = require('cluster');
const os = require('os');
const http = require('http');
const domain = require('domain');
const d = domain.create();
if (cluster.isMaster) {
const cpuNum = os.cpus().length;
for (let i = 0; i < cpuNum; i++) {
cluster.fork();
}
cluster.on('fork', worker => {
console.info(`${new Date()} worker ${worker.process.pid} 进程启动成功`);
});
cluster.on('exit', (worker, code, signal) => {
console.info(`${new Date()} worker ${worker.process.pid} 进程启动异常退出`);
cluster.fork();
});
} else {
http.createServer((req, res) => {
d.add(res);
d.on('error', (err) => {
console.log('记录的err信息', err.message);
console.log('出错的 work id:', process.pid);
res.end('服务器异常,请稍后再试');
cluster.worker.kill(process.pid);
});
d.run(handle.bind(null, req, res));
}).listen(8080);
}
function handle(req, res) {
if (process.pid % 2 === 0) {
throw new Error(`出错了`);
}
res.end(`response by worker: ${process.pid}`);
};
```
在上面的示例代码中,我们使用了domain模块来捕获异常,并使用try...catch语句块来捕获同步代码中的异常。当发生异常时,我们记录了错误信息,并向客户端发送了一个错误的响应。如果是主进程发生异常,我们会重新fork一个子进程来替代。
<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>