应用场景
- 网络操作:例如在使用
net
模块创建 TCP 服务器或客户端时。当网络连接出现问题,如连接超时、目标主机不可达等情况,会触发 error
事件。以创建 TCP 服务器为例:
const net = require('net');
const server = net.createServer();
server.on('error', (err) => {
console.error('服务器出现错误:', err.message);
});
server.listen(8080, '127.0.0.1', () => {
console.log('服务器已启动');
});
- 文件系统操作:在使用
fs
模块进行文件读取、写入、删除等操作时,如果文件不存在、权限不足等,会触发 error
事件。比如读取一个不存在的文件:
const fs = require('fs');
fs.readFile('nonexistentFile.txt', 'utf8', (err, data) => {
if (err) {
console.error('读取文件错误:', err.message);
} else {
console.log('文件内容:', data);
}
});
- 流操作:在处理可读流或可写流时,如
http
模块中的请求和响应流,当数据传输错误(如网络中断)或者流操作本身出现问题(如写入的数据格式不正确),会触发 error
事件。例如:
const http = require('http');
const server = http.createServer((req, res) => {
let data = '';
req.on('data', (chunk) => {
data += chunk;
});
req.on('end', () => {
try {
const jsonData = JSON.parse(data);
res.end('数据接收成功');
} catch (err) {
res.writeHead(400, { 'Content-Type': 'text/plain' });
res.end('数据格式错误');
}
});
req.on('error', (err) => {
console.error('请求流出现错误:', err.message);
});
});
server.listen(3000, () => {
console.log('HTTP 服务器已启动');
});
作用机制
- 事件绑定:
.on('error', callback)
方法用于为事件发射器绑定一个 error
事件监听器。当事件发射器内部出现错误情况时,会触发 error
事件。
- 错误传递:一旦触发
error
事件,会立即执行绑定的回调函数 callback
,并将错误对象作为参数传递给回调函数。这样开发者可以在回调函数中对错误进行处理,如记录错误日志、向用户返回合适的错误信息、采取相应的恢复措施等。如果没有为事件发射器绑定 error
事件监听器,且内部出现错误,Node.js 可能会抛出异常并导致进程崩溃。所以,.on('error', callback)
是一种重要的错误处理机制,确保程序在遇到错误时能够优雅地处理,而不是意外终止。