Quiero llamar a un evento io.emit('eventname') de socket.io, cuando se activa un evento personalizado en otro archivo en node.js. esto sucede en respuesta a una solicitud HTTP para una aplicación frontend
además, he creado un emisor de eventos común ya que la simple importación y exportación de eventos no se activaba, como se esperaba, entre archivos en node.js
commonEventEmitter.js
var events = require('events') var em = new events.EventEmitter() module.exports.commonEmitter = em;Este archivo recibe la solicitud HTTP y activa un evento, es decir, 'newSOS, registrado en el archivo socket.js
sosRequest.js
const common = require('../utils/commonEventEmitter') const commonEvent = common.commonEmitter exports.createSOS = asyncHandler( async (req,res,next) => { const { type , location } = req.body Request = await SOS.findOne({type : type , createdBy: req.commuter[0].id , status:'Pending'}) commonEvent.emit('newSOS') const request = await SOS.create({ type, location, createdBy, }) res.status(200).json({ success:true, request })En este archivo, se registra el evento 'newSOS' y se llama muchas veces a medida que se recibe una solicitud HTTP.
socket.js
const io = require('socket.io')() // const eventHandlers = require('./eventHandlers'); const common = require('../utils/commonEventEmitter') const commonEvent = common.commonEmitter io.on('connection' , (socket)=>{ commonEvent.on('newSOS' , ()=> { console.log('running only once'.bgGreen) io.emit('sos_admin' , "just do it") }) } module.exports = ioSe ejecuta varias veces en 1 página. El patrón de la siguiente manera:
Si la página se carga por primera vez, se ejecutará una vez. Si la página se carga por segunda vez, se ejecutará dos veces. Si la página se carga n veces, se ejecutará n veces.
y por favor también dígame si mi io.on('conexión') está siendo llamado varias veces.