Совместное использование носков По всему Node.js файлы

#javascript #node.js #socket.io

#язык JavaScript #node.js #socket.io

Вопрос:

У меня есть приложение для стека MERN, и у меня есть массив, который отслеживает зарегистрированных пользователей.

 server/index.js var connectedUsers = []  io.on('connection', (socket) =gt; {  socket.on('addUser', (userId) =gt; {  connectedUsers.push({userId, socket.id})  }) })  

У меня также есть запрос на публикацию для создания почтового документа.

 server/controllers/post export const createPost = async (req, res) =gt; {  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 });  } }  

После создания почтового документа и отправки его в формате JSON он проверит, соответствует ли пользователь каким-либо требованиям к значку (аналогичному значку Stackoverflow).

 export const awardBadges = async (userId) =gt; {  // Assign awards  // Update user's awards field with the badges he received   // and mailbox field with that specifies which awards he received }  

Если пользователь подключен и получил значок, он выдаст сообщение, чтобы пользователь отправил запрос GET в базу данных для получения поля своего почтового ящика.

Я знаю, что могу добиться этого, выполнив следующее:

 io.to(socket.id).emit("getMailbox");  

Но как я могу получить доступ к socketId, если он находится в другом node.js досье? Должен ли я сделать подключенных пользователей глобальным var?

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

1. зависимость вводится app в код ввода-вывода сокета, затем устанавливается io в app . require('./socket.io')(server, app) в server/index.js , затем в socket.io.js do module.exports = async (server, app) =gt; { const io = require('socket.io')(server); const socket_clients = {}; app.set('socket_clients', socket_clients); app.set('io', io) ... , затем из любого места вашего экспресс-кода , который у вас есть req.app.get('io').to(...).emit('...') , вы можете получить socketId const socket_clients = req.app.get('socket_clients'); const userSocket = socket_clients[userId] , главное app.set , что тогда req.app.get