什么是 Node.js 中的 “EventEmitter” 类?
EventEmitter
类是 Node.js 核心库的一部分,属于 events
模块。它用于处理事件和触发事件的机制。在 Node.js 中,许多内建模块都继承自 EventEmitter
,例如 http
、fs
、stream
等,允许对象监听和触发事件。
EventEmitter 的基本用法
要使用 EventEmitter
,首先需要引入 events
模块,并创建一个 EventEmitter
类的实例。
javascriptconst EventEmitter = require('events'); const emitter = new EventEmitter();
监听事件(Event Listening)
通过 on
方法监听事件,当指定的事件被触发时,执行回调函数。
javascriptemitter.on('event_name', function(data) { console.log('An event occurred!', data); });
触发事件(Event Emitting)
使用 emit
方法触发事件,可以传递任意数量的参数到监听器的回调函数中。
javascriptemitter.emit('event_name', { message: 'Hello world!' });
EventEmitter 的高级用法
只处理一次的监听器
如果只想让事件处理函数执行一次,可以使用 once
方法代替 on
。
javascriptemitter.once('event_name', function(data) { console.log('This will only be logged once', data); });
移除监听器
可以使用 removeListener
或 off
方法移除特定的监听器。
javascriptconst callback = function(data) { console.log('This will be removed later', data); }; emitter.on('event_name', callback); // Later emitter.removeListener('event_name', callback);
错误事件
推荐监听 error
事件,以便处理可能发生的错误情况。
javascriptemitter.on('error', (err) => { console.error('An error occurred:', err); });
实际示例
一个典型的使用场景是 HTTP 服务器的请求和响应处理。在 Node.js 的 http 模块中,服务器对象会在每次接收请求时触发一个 'request' 事件,开发者可以监听这个事件来响应客户端请求。
javascriptconst http = require('http'); const server = http.createServer(); server.on('request', (req, res) => { if (req.url === '/') { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Home Page'); } else if (req.url === '/about') { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('About Page'); } else { res.writeHead(404, { 'Content-Type': 'text/plain' }); res.end('Not Found'); } }); server.listen(3000, () => { console.log('Server is running on port 3000'); });
在这个例子中,服务器通过监听 'request' 事件来处理不同的 URL 请求。这种模式在 Node.js 中非常常见,使得事件驱动编程成为一种强大且灵活的方式来处理各种异步操作。
2024年8月8日 02:56 回复