• Node.js Video Tutorials

Node.js - 事件



当 JavaScript 用于 HTML 脚本内部时,它通常处理用户生成的事件,例如按钮按下或鼠标点击。Node.js 的核心 API 是一个异步事件驱动的架构。但是,与客户端 JavaScript 不同,它处理服务器上的事件,例如文件 IO 操作、服务器的请求和响应等。

net.Server 对象在每次对等方连接到它时都会发出一个事件。

引用文件的 ReadStream 在文件打开时以及每当有数据可供读取时都会发出一个事件。

Node.js 识别多种类型的事件。每个事件都可以附加一个回调函数。每当发生事件时,附加到它的回调就会被触发。Node.js 运行时始终在侦听可能发生的事件。当发生任何它可以识别的事件时,就会执行其附加的回调函数。

Node.js API 包括 events 模块,主要包含 EventEmitter 类。EventEmitter 对象触发(或发出)某种类型的事件。您可以为某种类型的事件分配一个或多个回调(侦听器)。每当该事件触发时,所有注册的回调都会按其注册顺序依次触发。

Event Emitter

以下是 Node.js API 中事件处理涉及的步骤。

首先,导入 events 模块,并声明一个 EventEmitter 类的对象

// Import events module
var events = require('events');

// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

使用以下语法将事件处理程序绑定到事件:

// Bind event and event  handler as follows
eventEmitter.on('eventName', eventHandler);

以编程方式触发事件:

// Fire an event 
eventEmitter.emit('eventName');

示例

下面是一个简单的示例,它将两个侦听器绑定到 EventEmitter 类的 on 事件

// Import events module
var events = require('events');

// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

// Create an event handler as follows
var connectHandler = function connected() {
   console.log('connection successful.');
}

// Bind the connection event with the handler
eventEmitter.on('connection', connectHandler);
 
// Bind the data_received event with the anonymous function
eventEmitter.on('data_received', function(){
   console.log('data received successfully.');
});

// Fire the connection event 
eventEmitter.emit('connection');

// Fire the data_received event 
eventEmitter.emit('data_received');
console.log("Program Ended.");

输出

connection successful.
data received successfully.
Program Ended.

Node 应用程序中的任何异步函数都将回调作为最后一个参数接受。回调函数将错误作为第一个参数接受。

创建一个名为 input.txt 的文本文件,内容如下。

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

创建一个名为 main.js 的 js 文件,包含以下代码:

var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
   if (err) {
      console.log(err.stack);
      return;
   }
   console.log(data.toString());
});
console.log("Program Ended");

这里 fs.readFile() 是一个异步函数,用于读取文件。如果在读取操作期间发生错误,则 err 对象将包含相应的错误,否则 data 将包含文件的内容。readFile 在读取操作完成后将 err 和 data 传递给回调函数,最终打印内容。

Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
广告