- 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 - 流
- Node.js - 檔案系統
- Node.js MySQL
- Node.js - MySQL 入門
- Node.js - MySQL 建立資料庫
- Node.js - MySQL 建立表
- Node.js - MySQL 插入資料
- Node.js - MySQL 從表中選擇資料
- Node.js - MySQL Where 條件
- Node.js - MySQL Order By 排序
- Node.js - MySQL 刪除資料
- Node.js - MySQL 更新資料
- Node.js - MySQL 聯接
- Node.js MongoDB
- Node.js - MongoDB 入門
- Node.js - MongoDB 建立資料庫
- Node.js - MongoDB 建立集合
- Node.js - MongoDB 插入資料
- Node.js - MongoDB 查詢資料
- Node.js - MongoDB 查詢
- Node.js - MongoDB 排序
- Node.js - MongoDB 刪除資料
- Node.js - MongoDB 更新資料
- Node.js - MongoDB 限制結果
- Node.js - MongoDB 聯接
- Node.js 模組
- Node.js - 模組
- Node.js - 內建模組
- Node.js - 實用程式模組
- Node.js - Web 模組
- Node.js 有用資源
- Node.js - 快速指南
- Node.js - 有用資源
- Node.js - 討論
Node.js - 域模組
Node.js 的domain 模組用於攔截未處理的錯誤。這些未處理的錯誤可以透過內部繫結或外部繫結來攔截。如果錯誤根本沒有被處理,則它們將簡單地使 Node 應用程式崩潰。
內部繫結 - 錯誤發射器在其程式碼中執行 domain 的 run 方法。
外部繫結 - 錯誤發射器使用其 add 方法顯式地新增到域中。
可以使用以下語法匯入此模組。
var domain = require("domain")
domain 模組的 domain 類用於提供將錯誤和未捕獲異常路由到活動 Domain 物件的功能。它是 EventEmitter 的子類。要處理它捕獲的錯誤,請偵聽其 error 事件。它使用以下語法建立:
var domain = require("domain");
var child = domain.create();
方法
| 序號 | 方法及描述 |
|---|---|
| 1 |
domain.run(function) 在域的上下文中執行提供的函式,隱式地繫結在此上下文中建立的所有事件發射器、計時器和低階請求。這是使用域的最基本方法。 |
| 2 |
domain.add(emitter) 顯式地將發射器新增到域中。如果發射器呼叫的任何事件處理程式丟擲錯誤,或者如果發射器發出 error 事件,它將被路由到域的 error 事件,就像隱式繫結一樣。 |
| 3 |
domain.remove(emitter) domain.add(emitter) 的反向操作。從指定的發射器中刪除域處理。 |
| 4 |
domain.bind(callback) 返回的函式將是提供的回撥函式的包裝器。當呼叫返回的函式時,丟擲的任何錯誤都將被路由到域的 error 事件。 |
| 5 |
domain.intercept(callback) 此方法幾乎與 domain.bind(callback) 相同。但是,除了捕獲丟擲的錯誤外,它還將攔截作為函式的第一個引數傳送的 Error 物件。 |
| 6 |
domain.enter() enter 方法是 run、bind 和 intercept 方法使用的管道,用於設定活動域。它將 domain.active 和 process.domain 設定為域,並隱式地將域推送到由 domain 模組管理的域堆疊(有關域堆疊的詳細資訊,請參閱 domain.exit())。對 enter 的呼叫限定了繫結到域的一系列非同步呼叫和 I/O 操作的開始。 |
| 7 |
domain.exit() exit 方法退出當前域,將其從域堆疊中彈出。每當執行切換到不同非同步呼叫鏈的上下文中時,務必確保退出當前域。對 exit 的呼叫限定了繫結到域的一系列非同步呼叫和 I/O 操作的結束或中斷。 |
| 8 |
domain.dispose() 一旦呼叫 dispose,域將不再由透過 run、bind 或 intercept 繫結到域的回撥使用,並且會發出 dispose 事件 |
屬性
| 序號 | 屬性及描述 |
|---|---|
| 1 |
domain.members 已顯式新增到域的計時器和事件發射器的陣列。 |
示例
建立一個名為 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 以檢視結果:
$ node main.js
驗證輸出。
listener handled this error (To be handled by listener)
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
