@MadmaN13

Как подписаться на события в другом модуле node.js?

Есть главный модуль в котором создан EventEmmiter, как подписаться на это событие в подключенном модуле?
Вариант с передачей в виде параметра отпадает, ибо этот модуль подключен не напрямую, а через цепочку подклбчений
  • Вопрос задан
  • 679 просмотров
Решения вопроса 2
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Можно явно положить ваш EventEmitter в глобальный скоуп:
const ee = global.ee = new EventEmitter();
Ну и обращаться к нему через global.ee везде.

Но это не очень хорошо скажется на архитектуре. Лучше бы не использовать модули как бизнес-сущности, а экспортировать их них какие-то функции, фабрики, классы, тогда проблема «модуль подключен не напрямую» перестанет иметь смысл.
Ответ написан
@Aves
Можно создать EventEmitter в отдельном модуле и импортировать его там, где он нужен.
//emitter.js
const {EventEmitter} = require('events');
module.exports = new EventEmitter();

//module.js
const e = require('./emitter.js');
e.on('test', n => console.log(n));

//main.js
const e = require('./emitter.js');
require('./module.js');
setInterval(() => { e.emit('test', Math.round(Math.random() * 10)) }, 1000);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
miraage
@miraage
Старый прогер
ioc
Ответ написан
Комментировать
@eQ1
Await головного мозга.
// module.js
module.exports = (ee) => {
    ee.on('test', n => console.log(n));
}

//app.js
const {EventEmitter} = require('events');
const ee = new EventEmitter();
require('./module.js')(ee);
...
ee.emit('test');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы