Node.js Domain 模块
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 模块相关推荐
- node.js中模块_在Node.js中需要模块:您需要知道的一切
node.js中模块 by Samer Buna 通过Samer Buna 在Node.js中需要模块:您需要知道的一切 (Requiring modules in Node.js: Everythi ...
- Node.js 工具模块
在 Node.js 模块库中有很多好用的模块.接下来我们为大家介绍几种常用模块的使用: 序号 模块名 & 描述 1 OS 模块 提供基本的系统操作函数. 2 Path 模块 提供了处理和转换文 ...
- Node.js中模块加载机制
Node.js中模块加载机制 模块查找规则-当模块拥有路径但没有后缀时 1. require方法根据模块路径查找模块,如果是完整路径,直接引入模块. 2. 如果模块后缀省略,先找同名JS文件再找同名J ...
- Node.js Web 模块
Node.js Web 模块 什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务.它只需支持HTTP协议. ...
- Node.js DNS 模块
Node.js 工具模块 Node.js DNS 模块用于解析域名.引入 DNS 模块语法格式如下: var dns = require("dns") 方法 序号 方法 & ...
- Node.js Net 模块
Node.js 工具模块 Node.js Net 模块提供了一些用于底层的网络通信的小工具,包含了创建服务器/客户端的方法,我们可以通过以下方式引入该模块: var net = require(&qu ...
- Node.js Path 模块
Node.js 工具模块 Node.js path 模块提供了一些用于处理文件路径的小工具,我们可以通过以下方式引入该模块: var path = require("path") ...
- Node.js OS 模块
Node.js 工具模块 Node.js os 模块提供了一些基本的系统操作函数.我们可以通过以下方式引入该模块: var os = require("os") 方法 序号 方法 ...
- Node.js:模块查找,引用及缓存机制
1. Node.js的模块载入方式与机制 Node.js中模块可以通过文件路径或名字获取模块的引用.模块的引用会映射到一个js文件路径,除非它是一个Node内置模块.Node的内置模块公开了一些常用的 ...
最新文章
- R语言使用compareGroups包绘制分组患者基线信息表实战:基于survival包lung数据集
- hdu4971 流-最大权闭包
- A组包含的前导码数( sizeOfRA-PreamblesGroupA)
- function 与 + - !~
- UVC (USB Video Class) 使用笔记 (转)
- python echo和linux交互_Python与shell的3种交互方式介绍
- 数据结构实验二 树和二叉树的实现
- [dp] LeetCode 62. Unique Paths
- 操作系统和Linux
- Android:通过Intent传递对象、Parcelable
- 【程序猿】2016年自己的十年计划篇
- 在Visual Studio 2005中调试SQL Server 2005的存储过程 (转)
- Windows开启SSH连接
- LTE-5G学习笔记14--VoLTE常用12大知识点
- springboot 配置日志文件
- 华硕AC68U路由器APP远程控制设置方法
- python画图颜色代码rgb_如何获取matplotlib颜色方案的RGB值?
- 《浅析招聘求职新渠道和传统网络招聘 》
- [Swift] 数组恒等 === 的 bug?!
- 科技爱好者周刊(第 153 期):机器翻译是对译者的侮辱吗?