Tengo una aplicación de pila MERN y tengo una matriz que realiza un seguimiento de los usuarios registrados.
server/index.js var connectedUsers = [] io.on('connection', (socket) => { socket.on('addUser', (userId) => { connectedUsers.push({userId, socket.id}) }) })También tengo una solicitud POST para crear un documento Post.
server/controllers/post export const createPost = async (req, res) => { const post = req.body; const newPostMessage = new PostMessage({ ...post, creator: req.userId, createdAt: new Date().toISOString() }) try { await newPostMessage.save(); res.status(200).json(newPostMessage); awardBadges(req.userId) } catch (error) { res.status(50).json({ message: error.message }); } }Después de crear un documento de publicación y enviarlo como JSON, verificará si el usuario cumple con los requisitos para una insignia (similar a la insignia de Stackoverflow)
export const awardBadges = async (userId) => { // Assign awards // Update user's awards field with the badges he received // and mailbox field with that specifies which awards he received }Si el usuario está conectado y recibió una credencial, emitirá un mensaje para que el usuario envíe una solicitud GET a la base de datos para obtener su campo de buzón.
Sé que puedo lograr esto haciendo lo siguiente:
io.to(socket.id).emit("getMailbox");Pero, ¿cómo puedo acceder al socketId si está en un archivo node.js diferente? ¿Tendría que hacer que los usuarios conectados sean una var global ?