Node.js Domain(域) 简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的异常。引入 Domain 模块 语法格式如下:
var domain = require("domain")
domain 模块,把处理多个不同的IO的操作作为一个组。注册事件和回调到domain,当发生一个错误事件或抛出一个错误时,domain对象 会被通知,不会丢失上下文环境,也不导致程序错误立即推出,与process.on('uncaughtException')不同。
Domain 模块可分为隐式绑定和显式绑定:
- 隐式绑定: 把在domain上下文中定义的变量,自动绑定到domain对象
- 显式绑定: 把不是在domain上下文中定义的变量,以代码的方式绑定到domain对象
方法
1 |
domain.run(function) 在域的上下文运行提供的函数,隐式的绑定了所有的事件分发器,计时器和底层请求。 |
2 |
domain.add(emitter) 显式的增加事件 |
3 |
domain.remove(emitter) 删除事件。 |
4 |
domain.bind(callback) 返回的函数是一个对于所提供的回调函数的包装函数。当调用这个返回的函数被时,所有被抛出的错误都会被导向到这个域的 error 事件。 |
5 |
domain.intercept(callback) 和 domain.bind(callback) 类似。除了捕捉被抛出的错误外,它还会拦截 Error 对象作为参数传递到这个函数。 |
6 |
domain.enter() 进入一个异步调用的上下文,绑定到domain。 |
7 |
domain.exit() 退出当前的domain,切换到不同的链的异步调用的上下文中。对应domain.enter()。 |
8 |
domain.dispose() 释放一个domain对象,让node进程回收这部分资源。 |
9 |
domain.create() 返回一个domain对象。 |
属性
1 |
domain.members 已加入domain对象的域定时器和事件发射器的数组。 |
实例
创建 main.js 文件,代码如下所示:
var EventEmitter = require("events").EventEmitter; var domain = require("domain"); var emitter1 = new EventEmitter(); // 创建域 var domain1 = domain.create(); domain1.on('error', function(err){ console.log("domain1 处理这个错误 ("+err.message+")"); }); // 显式绑定 domain1.add(emitter1); emitter1.on('error',function(err){ console.log("监听器处理此错误 ("+err.message+")"); }); emitter1.emit('error',new Error('通过监听器来处理')); emitter1.removeAllListeners('error'); emitter1.emit('error',new Error('通过 domain1 处理')); var domain2 = domain.create(); domain2.on('error', function(err){ console.log("domain2 处理这个错误 ("+err.message+")"); }); // 隐式绑定 domain2.run(function(){ var emitter2 = new EventEmitter(); emitter2.emit('error',new Error('通过 domain2 处理')); }); domain1.remove(emitter1); emitter1.emit('error', new Error('转换为异常,系统将崩溃!'));
执行以上代码,结果如下所示:
监听器处理此错误 (通过监听器来处理) domain1 处理这个错误 (通过 domain1 处理) domain2 处理这个错误 (通过 domain2 处理) events.js:72 throw er; // Unhandled 'error' event ^ Error: 转换为异常,系统将崩溃! at Object.<anonymous> (/www/node/main.js:40:24) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:929:3
原文:http://www.runoob.com/nodejs/nodejs-domain-module.html
本文转自:Node.js Domain 模块
相关推荐
Node.js的Domain模块是处理异步操作异常的一种机制,它为开发者提供了一种方便的方式来集中管理、捕获和处理在特定域(Domain)内发生的错误。这个模块特别有用,因为Node.js中的错误处理通常依赖于try-catch块,但...
《Node.js设计模式第二版》是一本专注于Node.js开发中的高级设计原则和模式的书籍,其核心主题是领域驱动设计(Domain-Driven Design,简称DDD)。领域驱动设计是一种软件开发方法,强调通过深入理解业务领域来创建...
对于未处理的异常,如果已经注册了process.on('uncaughtException')事件的处理函数,则可以捕获该异常并防止进程崩溃,或者可以利用domain模块来处理异常。 Error类是所有JavaScript错误类型的基类,它能够捕捉堆栈...
6. **定时任务**:如果需要定期获取最新数据,可以集成定时任务模块,如Node.js的cron库,按设定的时间间隔运行爬虫。 总体来说,这个项目对于想要学习或实践网络数据抓取,特别是与域名备案相关的开发者来说,具有...
这可以通过Node.js的内置`dns`模块完成,调用`dns.resolveTxt(domain)`。 2. **解析记录**:解析得到的TXT记录字符串,将其分解成各个部分。可以使用正则表达式或其他字符串处理方法。 3. **处理机制**:遍历每个...
Node.js 是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript编写服务器端代码。Node.js拥有丰富的生态系统,包含大量开源库,用于构建各种类型的应用,包括命令行工具。 **命令行应用**: ...
Node.js 提供了一系列内置模块,这些模块被编译到 Node.js 的二进制文件中。以下是一些常用的内置模块: - **Buffers**:用于处理二进制数据。 - **EventEmitter**:事件触发器。 - **Streams**:流处理。 - **...
核心模块是预编译的,直接由Node.js提供;而文件模块则是通过加载特定文件来实现的。文档还提到了如何从`node_modules`文件夹中加载模块,以及如何将文件夹作为模块使用。 #### 五、模块缓存与模块对象 模块在首次...
`dynsdjs`是这样一个项目,它是一个用Node.js编写的简单DNS(Domain Name System)服务器守护进程,旨在提供轻量级且高效的DNS解析服务。 首先,我们需要理解DNS的基本概念。DNS是互联网的一项核心服务,它将人类可...
单元测试由Mocha模块提供支持,进行单元测试请在终端中执行以下命令:mocha 测试用例.test.js运行运行博客,请在配置好Node.js与Express框架及其他模块后,执行以下命令:npm start bin/www或者你也可以使用Forver...
OpenShift Node.js 模块,用于从 Node.js 与 OpenShift 交互。 用法 安装 # install module npm install --save rhcjs 用法 - 基本身份验证 var rhc = require('rhcjs)({ username : 'test@test.com', password...
Node.js环境中,为了实现加密通信,通常需要使用到`crypto`模块,它可以用来创建加密模块,进行密钥和证书的管理。一旦你从.pfx文件中提取出了私钥和证书,就可以在Node.js程序中加载它们来建立SSL/TLS连接,比如...
为了简化这个问题,Node.js引入了`domain`模块,它允许开发者在一个特定的域(或者说上下文)中组织代码,这样任何在这个域中产生的异常都可以通过监听域的`error`事件来集中处理。 首先,理解`domain`的基本概念。...
util.debuglog可以用于创建一个简单的调试函数,domain模块用于错误处理,允许将多个IO操作组合在一起,并且在一个地方捕获错误。 Node.js API中文版的发布,极大地便利了中文使用者,使其能够更便捷地查阅官方API...
Node.js v6.10.2 文档 关于本文档 用法与例子 Assert (断言) Buffer C/C++ 插件 Child Processes (子进程) Cluster (集群) CLI (命令行选项) Console (控制台) Crypto (加密) Debugger (调试器) DNS (域名服务器) ...
joomla cms 的 node.js 聊天模块 安装 npm install jchat 目标 开发一个节点聊天模块,它将与 joomla 组件一起工作 单独的聊天正在运行,但仍然缺少 joomla 部分 您可以连接到 your-domain.tld:3000 下的聊天。 要...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它是一个事件驱动、非阻塞I/O模型的轻量级运行平台,非常适合用来构建网络应用和各种服务端程序。Node.js v10版本的API文档提供了开发者在使用该版本Node...
**Node.js Domain模块** 在Node.js中,`domain`模块提供了一种机制,可以在一组相关的事件之间创建上下文,当这组事件中发生异常时,可以统一处理这些异常,而不是让程序崩溃。通过将I/O操作绑定到特定的域,可以更...