`
天梯梦
  • 浏览: 13793693 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

Node.js Domain 模块

 
阅读更多

Node.js 工具模块Node.js 工具模块

 

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

 

Node.js 工具模块Node.js 工具模块

 

原文:http://www.runoob.com/nodejs/nodejs-domain-module.html

本文转自:Node.js Domain 模块

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Node.js Domain 模块实例详解

    Node.js的Domain模块是处理异步操作异常的一种机制,它为开发者提供了一种方便的方式来集中管理、捕获和处理在特定域(Domain)内发生的错误。这个模块特别有用,因为Node.js中的错误处理通常依赖于try-catch块,但...

    Node.js Design Patterns Second Edition领域驱动.zip

    《Node.js设计模式第二版》是一本专注于Node.js开发中的高级设计原则和模式的书籍,其核心主题是领域驱动设计(Domain-Driven Design,简称DDD)。领域驱动设计是一种软件开发方法,强调通过深入理解业务领域来创建...

    Node.js API详解之 Error模块用法实例分析

    对于未处理的异常,如果已经注册了process.on('uncaughtException')事件的处理函数,则可以捕获该异常并防止进程崩溃,或者可以利用domain模块来处理异常。 Error类是所有JavaScript错误类型的基类,它能够捕捉堆栈...

    Node.js-获取最新可备案域名列表爬虫

    6. **定时任务**:如果需要定期获取最新数据,可以集成定时任务模块,如Node.js的cron库,按设定的时间间隔运行爬虫。 总体来说,这个项目对于想要学习或实践网络数据抓取,特别是与域名备案相关的开发者来说,具有...

    Node.js-用JS解析SPF(senderpolicyframework)记录

    这可以通过Node.js的内置`dns`模块完成,调用`dns.resolveTxt(domain)`。 2. **解析记录**:解析得到的TXT记录字符串,将其分解成各个部分。可以使用正则表达式或其他字符串处理方法。 3. **处理机制**:遍历每个...

    Node.js-动态设置域名解析至本地公网ip的命令行工具

    Node.js 是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript编写服务器端代码。Node.js拥有丰富的生态系统,包含大量开源库,用于构建各种类型的应用,包括命令行工具。 **命令行应用**: ...

    Node.js中文文档

    Node.js 提供了一系列内置模块,这些模块被编译到 Node.js 的二进制文件中。以下是一些常用的内置模块: - **Buffers**:用于处理二进制数据。 - **EventEmitter**:事件触发器。 - **Streams**:流处理。 - **...

    Node.js v4.2.4 手册

    核心模块是预编译的,直接由Node.js提供;而文件模块则是通过加载特定文件来实现的。文档还提到了如何从`node_modules`文件夹中加载模块,以及如何将文件夹作为模块使用。 #### 五、模块缓存与模块对象 模块在首次...

    Node.js-dynsdjs采用NodeJS编写的简单DNS服务器守护进程

    `dynsdjs`是这样一个项目,它是一个用Node.js编写的简单DNS(Domain Name System)服务器守护进程,旨在提供轻量级且高效的DNS解析服务。 首先,我们需要理解DNS的基本概念。DNS是互联网的一项核心服务,它将人类可...

    基于Node.js—Express框架的博客LittleBlog.zip

    单元测试由Mocha模块提供支持,进行单元测试请在终端中执行以下命令:mocha 测试用例.test.js运行运行博客,请在配置好Node.js与Express框架及其他模块后,执行以下命令:npm start bin/www或者你也可以使用Forver...

    rhcjs:用于从 Node.js 与 OpenShift 交互的 OpenShift Node.js 模块

    OpenShift Node.js 模块,用于从 Node.js 与 OpenShift 交互。 用法 安装 # install module npm install --save rhcjs 用法 - 基本身份验证 var rhc = require('rhcjs)({ username : 'test@test.com', password...

    Node.js中.pfx后缀文件的处理方法

    Node.js环境中,为了实现加密通信,通常需要使用到`crypto`模块,它可以用来创建加密模块,进行密钥和证书的管理。一旦你从.pfx文件中提取出了私钥和证书,就可以在Node.js程序中加载它们来建立SSL/TLS连接,比如...

    解析Node.js异常处理中domain模块的使用方法

    为了简化这个问题,Node.js引入了`domain`模块,它允许开发者在一个特定的域(或者说上下文)中组织代码,这样任何在这个域中产生的异常都可以通过监听域的`error`事件来集中处理。 首先,理解`domain`的基本概念。...

    nodejsAPI中文版

    util.debuglog可以用于创建一个简单的调试函数,domain模块用于错误处理,允许将多个IO操作组合在一起,并且在一个地方捕获错误。 Node.js API中文版的发布,极大地便利了中文使用者,使其能够更便捷地查阅官方API...

    Node.js v6.10.2 中文文档、包含英文

    Node.js v6.10.2 文档 关于本文档 用法与例子 Assert (断言) Buffer C/C++ 插件 Child Processes (子进程) Cluster (集群) CLI (命令行选项) Console (控制台) Crypto (加密) Debugger (调试器) DNS (域名服务器) ...

    node-jchat:joomla cms 的 node.js 聊天模块

    joomla cms 的 node.js 聊天模块 安装 npm install jchat 目标 开发一个节点聊天模块,它将与 joomla 组件一起工作 单独的聊天正在运行,但仍然缺少 joomla 部分 您可以连接到 your-domain.tld:3000 下的聊天。 要...

    node中文api文档.pdf

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它是一个事件驱动、非阻塞I/O模型的轻量级运行平台,非常适合用来构建网络应用和各种服务端程序。Node.js v10版本的API文档提供了开发者在使用该版本Node...

    前端开源库-express-domain-middleware

    **Node.js Domain模块** 在Node.js中,`domain`模块提供了一种机制,可以在一组相关的事件之间创建上下文,当这组事件中发生异常时,可以统一处理这些异常,而不是让程序崩溃。通过将I/O操作绑定到特定的域,可以更...

Global site tag (gtag.js) - Google Analytics