Node.js — Модуль Domain

Node.js — Модуль Domain

От автора: модуль Node.js Domain используется для перехвата необработанных ошибок. Необработанные ошибки могут быть перехвачена с использованием внутренней или внешней привязки. Если ошибки не обрабатываются вообще, они просто приводят к сбою приложения Node.

Внутренняя привязка — эмиттер ошибки выполняет код в методе domain домена.

Внешняя привязка — эмиттер ошибки добавляется явно в domain, используя его метод add.

Этот модуль можно импортировать, используя следующий синтаксис.

var domain = require("domain")

Класс domain модуля domain используется для обеспечения функционала перенаправления ошибок и неперехваченных исключений в активный объект Domain. Это дочерний класс EventEmitter. Чтобы сделать обработку ошибок, которые он перехватывает, выполняется прослушивание события error. Оно создается с помощью следующего синтаксиса:

Фреймворк VUE JS: быстрый старт, первые результаты

Получите бесплатный курс и создайте веб-приложение на трендовой Frontend-технологии VUE JS с полного нуля

Узнать подробнее
var domain = require("domain");
var child = domain.create();

Методы

domain.run(function) — Запускает предоставленную функцию в контексте domain, неявно привязав все эмиттеры событий, таймеры и запросы низкого уровня, созданные в этом контексте. Это самый простой способ использования domain.

domain.add(emitter) — Явно добавляет эмиттер в domain. Если любые обработчики событий, вызываемые эмиттером, приводят к ошибке, или, если эмиттер запускает событие error, он будет перенаправлен на событие error из domain, как в случае неявной привязки.

domain.remove(emitter) — Противоположно domain.add(emitter). Удаляет обработку domain из указанного эмиттера.

domain.bind(callback) — Возвращаемая функция будет оболочкой для предоставленной функции обратного вызова. Когда вызывается возвращаемая функция, любые возникшие ошибки будут перенаправлены на событие error из domain.

domain.intercept(callback) — Этот метод почти идентичен domain.bind (callback). Однако, кроме перехвата возникающих ошибок, он также будет перехватывать объекты Error, отправленные в качестве первого аргумента функции.

domain.enter() — Метод enter — это канал, используемый методами run, bind и intercept для установки активного домена. Он устанавливает domain.active и process.domain в домен и неявно добавляет домен в стек доменов, управляемый модулем domain (для получения подробной информации о стеке доменов см. Domain.exit()). Обращение к enter ограничивает начало цепочки асинхронных вызовов и операций ввода-вывода, привязанных к домену.

domain.exit() — Метод exit осуществляет выход из текущего домена, выводя его из стека доменов. Каждый раз, когда выполнение переключается на контекст другой цепи асинхронных вызовов, необходимо обеспечить выход из текущего домена. Обращение к exit ограничивает либо конец, либо прерывание цепочки асинхронных вызовов и операций ввода-вывода, привязанных к домену.

domain.dispose() — После вызова dispose, домен больше не будет использоваться обратными вызовами, привязанными к домену с помощью run, bind или intercept, а также запускается событие dispose.

Свойства

domain.members — Массив таймеров и эмитеров событий, которые были явно добавлены в домен.

Пример

Создайте файл js с именем main.js со следующим кодом:

var EventEmitter = require("events").EventEmitter;
var domain = require("domain");
 
var emitter1 = new EventEmitter();
 
// Создание domain
var domain1 = domain.create();
 
domain1.on('error', function(err){
 console.log("domain1 handled this error ("+err.message+")");
});
 
// Явная привязка 
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+")");
});
 
// Неявная привязка
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; // Необработанное событие 'error'
 ^
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

Источник: https://www.tutorialspoint.com/

Редакция: Команда webformyself.

Фреймворк VUE JS: быстрый старт, первые результаты

Получите бесплатный курс и создайте веб-приложение на трендовой Frontend-технологии VUE JS с полного нуля

Узнать подробнее

FullStack-Мастер

FullStack-Мастер. Разработка CRM-системы на Node.js, Express, Angular 6

Научиться

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree