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:72throw 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 工具模块

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

本文转自:Node.js Domain 模块

Node.js Domain 模块相关推荐

  1. node.js中模块_在Node.js中需要模块:您需要知道的一切

    node.js中模块 by Samer Buna 通过Samer Buna 在Node.js中需要模块:您需要知道的一切 (Requiring modules in Node.js: Everythi ...

  2. Node.js 工具模块

    在 Node.js 模块库中有很多好用的模块.接下来我们为大家介绍几种常用模块的使用: 序号 模块名 & 描述 1 OS 模块 提供基本的系统操作函数. 2 Path 模块 提供了处理和转换文 ...

  3. Node.js中模块加载机制

    Node.js中模块加载机制 模块查找规则-当模块拥有路径但没有后缀时 1. require方法根据模块路径查找模块,如果是完整路径,直接引入模块. 2. 如果模块后缀省略,先找同名JS文件再找同名J ...

  4. Node.js Web 模块

    Node.js Web 模块 什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务.它只需支持HTTP协议. ...

  5. Node.js DNS 模块

    Node.js 工具模块 Node.js DNS 模块用于解析域名.引入 DNS 模块语法格式如下: var dns = require("dns") 方法 序号 方法 & ...

  6. Node.js Net 模块

    Node.js 工具模块 Node.js Net 模块提供了一些用于底层的网络通信的小工具,包含了创建服务器/客户端的方法,我们可以通过以下方式引入该模块: var net = require(&qu ...

  7. Node.js Path 模块

    Node.js 工具模块 Node.js path 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方式引入该模块: var path = require("path") ...

  8. Node.js OS 模块

    Node.js 工具模块 Node.js os 模块提供了一些基本的系统操作函数.我们可以通过以下方式引入该模块: var os = require("os") 方法 序号 方法 ...

  9. Node.js:模块查找,引用及缓存机制

    1. Node.js的模块载入方式与机制 Node.js中模块可以通过文件路径或名字获取模块的引用.模块的引用会映射到一个js文件路径,除非它是一个Node内置模块.Node的内置模块公开了一些常用的 ...

最新文章

  1. R语言使用compareGroups包绘制分组患者基线信息表实战:基于survival包lung数据集
  2. hdu4971 流-最大权闭包
  3. A组包含的前导码数( sizeOfRA-PreamblesGroupA)
  4. function 与 + - !~
  5. UVC (USB Video Class) 使用笔记 (转)
  6. python echo和linux交互_Python与shell的3种交互方式介绍
  7. 数据结构实验二 树和二叉树的实现
  8. [dp] LeetCode 62. Unique Paths
  9. 操作系统和Linux
  10. Android:通过Intent传递对象、Parcelable
  11. 【程序猿】2016年自己的十年计划篇
  12. 在Visual Studio 2005中调试SQL Server 2005的存储过程 (转)
  13. Windows开启SSH连接
  14. LTE-5G学习笔记14--VoLTE常用12大知识点
  15. springboot 配置日志文件
  16. 华硕AC68U路由器APP远程控制设置方法
  17. python画图颜色代码rgb_如何获取matplotlib颜色方案的RGB值?
  18. 《浅析招聘求职新渠道和传统网络招聘 》
  19. [Swift] 数组恒等 === 的 bug?!
  20. 科技爱好者周刊(第 153 期):机器翻译是对译者的侮辱吗?

热门文章

  1. 字符串处理 —— 回文串相关 —— 回文串的判断
  2. 求最长不下降序列(信息学奥赛一本通-T1259)
  3. 信息学奥赛C++语言:等级化的成绩
  4. 信息学奥赛C++语言:输出浮点数(1)
  5. 学习笔记3 :pyqt5 显示opencv 和 PIL图片
  6. android案例_Android实训案例——计算器的运算逻辑
  7. PyCharm:调试遇到问题
  8. 服务器安装三节点RabbitMQ集群
  9. modprobe:用于向内核中加载模块或者从内核中移除模块。
  10. DND(darmstadt noise dataset)数据集的坑