- Node.js教程
- Node.js - 教程
- Node.js - 简介
- Node.js - 环境设置
- Node.js - 首次申请
- Node.js - REPL 终端
- Node.js - 命令行选项
- Node.js - 包管理器 (NPM)
- Node.js - 回调概念
- Node.js - 上传文件
- Node.js - 发送电子邮件
- Node.js - 活动
- Node.js - 事件循环
- Node.js - 事件发射器
- Node.js - 调试器
- Node.js - 全局对象
- Node.js - 控制台
- Node.js - 流程
- Node.js - 扩展应用程序
- Node.js - 包装
- Node.js - Express 框架
- Node.js - RESTful API
- Node.js - 缓冲器
- Node.js - Streams
- Node.js - 文件系统
- Node.js MySQL
- Node.js - MySQL 快速入门
- Node.js - MySQL创建数据库
- Node.js - MySQL创建表
- Node.js - MySQL Insert Into
- Node.js - MySQL Select From
- Node.js - MySQL Where 子句
- Node.js - MySQL Order By
- Node.js - MySQL Delete
- Node.js - MySQL Update
- Node.js - MySQL Join
- Node.js MongoDB
- Node.js - MongoDB 快速入门
- Node.js - MongoDB 创建数据库
- Node.js - MongoDB 创建集合
- Node.js - MongoDB Insert
- Node.js - MongoDB Find
- Node.js - MongoDB 查询
- Node.js - MongoDB 排序
- Node.js - MongoDB Delete
- Node.js - MongoDB Update
- Node.js - MongoDB Limit
- Node.js - MongoDB Join
- Node.js模块
- Node.js - 模块
- Node.js - 内置模块
- Node.js - utility 模块
- Node.js - Web 模块
Node.js - domain 模块
Node.js domain 模块用于拦截未处理的错误。可以使用内部绑定或外部绑定来截获这些未处理的错误。如果错误根本没有得到处理,那么它们只会使 Node 应用程序崩溃。
- 内部绑定 - 错误发射器正在 domain 的 run 方法中执行其代码。
- 外部绑定 - 使用其 add 方法将错误发射器显式添加到 domain 中。
可以使用以下语法导入此模块。
var domain = requi re("domain")
Domain 模块的 Domain 类用于为活动 Domain 对象提供路由错误和未捕获异常的功能。它是 EventEmitter 的子类。要处理它捕获的错误,请侦听其错误事件。它是使用以下语法创建的 -
var domain = require("domain");
var child = domain.create();
方法
方法 | 描述 |
---|---|
domain.run(function) |
在 domain 的上下文中运行提供的函数,隐式绑定在该上下文中创建的所有事件发射器、计时器和 lowl evel 请求。这是使用 domain 的最基本方法。 |
domain.add(emitter) |
将发射器显式添加到 domain 中。如果发射器调用的任何事件处理程序抛出错误,或者发射器发出错误事件,它将被路由到 domain 的错误事件,就像隐式绑定一样。 |
domain.remove(emitter) |
与 domain.add(emitter) 相反。从指定的发射器中删除 domain 处理。 |
domain.bind(callback) |
返回的函数将是提供的回调函数的包装器。当调用返回的函数时,引发的任何错误都将被路由到 domain 的错误事件。 |
domain.intercept(callback) |
此方法与 domain.bind(callback) 几乎相同。但是,除了捕获抛出的错误外,它还将拦截作为第一个参数发送到函数的 Error 对象。 |
domain.enter() |
enter 方法是 run、bind 和 intercept 方法用来设置活动 domain 的管道。它将 domain.active 和 process.domain 设置为 domain ,并将 domain 隐式推送到由 domain 模块管理的 domain 堆栈上(有关 domain 堆栈的详细信息,请参阅 domain.exit())。对 enter 的调用分隔了绑定到 domain 的异步调用和 I/O 操作链的开始。 |
domain.exit() |
exit 方法退出当前 domain ,将其从 domain 堆栈中弹出。每当执行切换到不同异步调用链的上下文时,请务必确保退出当前 domain 。退出调用用于分隔绑定到 domain 的异步调用和 I/O 操作链的结束或中断。 |
domain.dispose() |
一旦调用了 dispose,通过 run、bind 或 intercept 绑定到 domain 的回调将不再使用该 domain ,并且会发出 dispose 事件 |
属性
属性 | 描述 |
---|---|
domain.members |
已显式添加到 domain 中的计时器和事件发射器的数组。 |
例子
使用以下代码创建名为 main.js 的 js 文件 -
var EventEmitter = require("events").EventEmitter;
var domain = require("domain");
var emitter1 = new EventEmitter();
// Create a domain
var domain1 = domain.create();
domain1.on('error', function(err) {
console.log("domain1 handled this error ("+err.message+")");
});
// Explicit binding
domain1.add(emitter1);
emitter1.on('error',function(err) {
console.log("listener handled this error ("+err.message+")");
});
emitter1.emit('error',new Error('To be handled by listener'));
emitter1.removeAllListeners('error');
emitter1.emit('error',new Error('To be handled by domain1'));
var domain2 = domain.create();
domain2.on('error', function(err) {
console.log("domain2 handled this error ("+err.message+")");
});
// Implicit binding
domain2.run(function() {
var emitter2 = new EventEmitter();
emitter2.emit('error',new Error('To be handled by domain2'));
});
domain1.remove(emitter1);
emitter1.emit('error', new Error('Converted to exception. System will crash!'));
现在运行main.js以查看结果 -
验证输出
domain1 handled this error (To be handled by domain1)
domain2 handled this error (To be handled by domain2)
events.js:72 throw er; // Unhandled 'error' event
^
Error: Converted to exception. System will crash!
at Object. (/web/com/1427722220_30772/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:906:3