node.js入门 - 8.api:events

简介:   从今天开始,我们将介绍node的一些重要的api,首先向大家介绍的是events。他是node中相当重要的一个api,也是实现其他一些api的基础,对他有好的理解,会帮助你使用好其他的api。   如果你用javascript开发过浏览器的应用,那你一定很熟悉事件。

  从今天开始,我们将介绍node的一些重要的api,首先向大家介绍的是events。他是node中相当重要的一个api,也是实现其他一些api的基础,对他有好的理解,会帮助你使用好其他的api。

  如果你用javascript开发过浏览器的应用,那你一定很熟悉事件。但浏览器中的事件来源于dom,而不是javascript。dom中用户驱动的事件通过一系列树状元素(html/xml)的接口实现与用户的交互,当用户和dom交互的时候就会产生相应的事件。

 

  1.EventEmitter

   node中不存在dom这个对象,所以他自己创建了EventEmitter类来实现基本的事件功能,node中其他事件的实现都是通过这个接口类实现的。EventEmitter中最重要的两个方法是on和emit,来供其他类使用。on实现为事件实现监听的功能,它有两个参数,第一个是监听的事件,第二个是相应的回调函数。来看一个例子:

server.on('event', function(a, b, c) {
  //do things
});

   EventEmitter是一个接口,所以我们需要创建一个继承自它的类,使用新创建的类实现事件,而不是直接使用它。看下例:

var utils = require('utils'),
EventEmitter = require('events').EventEmitter;
var Server = function() {
  console.log('init');
};
utils.inherits(Server, EventEmitter);
var s = new Server(); s.on('abc', function() {   console.log('abc'); });

   通过上面的步骤,我们创建了Server类,并让它继承自EventEmitter,这样我们就可以使用EventEmitter中相应的方法了。例如上面我们使用on监听了一个叫做‘abc’的事件。那么我们如何才能触发这个事件呢?用下面的语句即可。

s.emit('abc');

  这里需要强调的一点是,那些事件是实例级别的,不存在一个全局的事件,不同的Server的实例对象不能共享他们的事件。比如,上面的s对象就不能共享下面对象z的事件,

var z = new Server();.

 

  2.Callback

  使用事件,一个很重要的内容是使用回调函数,下面我们来了解下node中回调函数的机制。

  在使用emit方法的时候,除了事件名称这个参数之外,我们还可以添加任意一些其他的参数,例如:

s.emit('abc', a, b, c);

  其他的一些参数会传递给回调函数。当我们使用emit方法的时候,下面的代码会去访问每一个监听的事件。

if (arguments.length <= 3) {
  // fast case
  handler.call(this, arguments[1], arguments[2]);
} else {
  // slower
  var args = Array.prototype.slice.call(arguments, 1);
  handler.apply(this, args);
}

  根据参数的长短,代码会选择是使用call还是使用apply。请注意第一个参数this,这意味着访问事件监听器的上下文是EventEmitter的上下文,而不是代码原先的上下文。使用node REPL,你会看到使用EventEmitter到底发生了什么。运行【开始】菜单,选择【所有程序】,找到【Node.js (x86)】,点【Node.js】,逐行输入下面内容(换行使用shift+回车),也可以使用粘贴复制的方式输入:

var EventEmitter = require('events').EventEmitter,util = require('util');

var Server = function() {};
util.inherits(Server, EventEmitter);
Server.prototype.outputThis= function(output) {
  console.log(this);
  console.log(output);
};

Server.prototype.emitOutput = function(input) {   this.emit('output', input); }; Server.prototype.callEmitOutput = function() {   this.emitOutput('innerEmitOutput'); };
var s = new Server(); s.on('output', s.outputThis); s.emitOutput('outerEmitOutput'); s.callEmitOutput(); s.emit('output', 'Direct');

  结果:

   注意到蓝线部分,这部分就是console.log(this)输出的内容,看的出this不论在那种情况下,指向的都是EventEmitter对象。

目录
相关文章
|
7月前
|
JSON 安全 API
电商API入门问答:开发者必知的10个基础问题
本文详解电商API的10个基础知识,涵盖定义、用途、认证、安全等内容,帮助开发者快速入门并提升开发效率。
202 0
|
7月前
|
缓存 监控 安全
电商API集成入门:从零开始搭建高效接口
在数字化电商时代,API集成成为企业提升效率、实现系统互联的关键。本文从零开始,逐步讲解如何搭建高效、可靠的电商API接口,适合初学者学习。内容涵盖API基础、认证安全、请求处理、性能优化等核心步骤,并提供Python代码示例与数学公式辅助理解。通过实践,读者可掌握构建优质电商API的技巧,提升用户体验与系统性能。
314 0
|
4月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
10月前
|
JSON 算法 API
一文掌握 1688 商品详情 API 接口:从入门到实战
1688是国内领先的综合电商批发平台,提供海量商品资源。其商品详情API助力开发者与企业获取商品的详细信息(如属性、价格、库存等),广泛应用于电商数据分析、比价系统及采购场景。API支持GET/POST请求,需传入通用参数(app_key、timestamp等)与业务参数(如product_id)。返回JSON格式数据,包含商品标题、价格、图片链接等详情,提升业务效率与决策精准度。
|
10月前
|
搜索推荐 API 开发者
京东商品列表 API 接口全解析:从入门到精通
京东商品列表API是京东开放平台为开发者提供的核心数据接口,支持批量获取商品基础信息、价格、库存状态等多维度数据。它具备数据丰富性、灵活筛选与分页查询、稳定高效等特点,可满足市场分析、选品优化、比价工具及推荐系统开发等需求,为电商业务创新提供坚实支撑。通过标准化通道,助力第三方高效、合法地利用京东海量商品数据。
|
9月前
|
JSON API 开发工具
电商API接口入门指南
本文介绍了API的基础知识及其在电商领域的实际应用。首先,阐释了API的概念、运作机制及参数与返回值的作用,帮助读者理解如何通过API实现软件间的交互。接着,以获取电商商品列表为例,详细讲解了从选择平台、引入SDK到编写代码调用API的全流程。示例代码采用Python语言,利用requests库发送请求并解析JSON数据,为开发者提供了清晰的实践指导。
|
7月前
|
存储 安全 API
亚马逊SP-API入门:海外电商接口调用与国内平台的差异化
亚马逊 SP-API 与国内电商 API 在技术架构、安全机制及开发流程上差异显著。本文对比京东、淘宝等平台,分析接口设计、地域适配、权限管理等核心差异,并结合实战经验提供开发建议,助力开发者高效接入 SP-API,实现全球电商业务拓展。
|
9月前
|
数据挖掘 API 开发者
京东商品详情 API 接口全攻略:从入门到精通
京东商品详情API接口是京东开放平台为开发者提供的服务,用于获取商品详细信息。通过调用接口,开发者可获得商品属性、价格、库存、促销信息等数据,适用于电商应用、价格比较工具及数据分析平台等场景。支持GET/POST请求方式,参数包括API版本、密钥等。示例代码展示了如何使用Python的requests库调用该接口,并获取JSON格式的返回数据,包含商品基本信息、价格、库存和用户评价等内容。
373 16
|
10月前
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
11月前
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
872 17