Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

129
Visualizações
enviar mensajes anteriores en el chat grupal

Trabajo en una aplicación de chat. Quiero almacenar mensajes en un objeto como este:

 { 'room1': ['msg1', 'msg2', ...] 'room2': ['msg3', 'msg4', ...] ... }

Definí una variable en mi servidor roomMessages , el problema es cuando quiero agregar un mensaje en una habitación específica usando roomMessages[room].push(data); me muestra este error: TypeError: Cannot read properties of undefined (reading 'push') este es mi código socket.io:

 const roomMessages = {}; roomsNamespace.use((socket, next) => { const token = socket.handshake.query.token; console.log(token); if (!token) return next(new Error("not auth")); next(); }); roomsNamespace.on("connection", (socket) => { const token = socket.handshake.query.token; const apiService = new ApiService(process.env.BE_URL, token); const room = socket.handshake.query.room; socket.on("join-room", async () => { socket.join(room); await apiService.joinRoom(room); const usersInThisRoom = await apiService.getUsersInRoom(room); roomsNamespace.in(room).emit("all-users", usersInThisRoom); socket.emit("room-messages", roomMessages[room]); }); socket.on("chat-message", (data) => { // console.log(data); if (roomMessages[room]) roomMessages[room].push(data); roomsNamespace.in(room).emit("chat-message", data); });

Básicamente, quiero enviar mensajes anteriores cuando el usuario se une al chat. ¿Cómo solucionar este error?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

puedes hacer algo como esto

 const roomMessages = {}; const getMessages = (room) => roomMessages[room] || [] const addMessage = (room, message) => { roomMessages[room] = [...getMessages(room), message] } roomsNamespace.use((socket, next) => { const token = socket.handshake.query.token; console.log(token); if (!token) return next(new Error("not auth")); next(); }); roomsNamespace.on("connection", (socket) => { const token = socket.handshake.query.token; const apiService = new ApiService(process.env.BE_URL, token); const room = socket.handshake.query.room; socket.on("join-room", async () => { socket.join(room); await apiService.joinRoom(room); const usersInThisRoom = await apiService.getUsersInRoom(room); roomsNamespace.in(room).emit("all-users", usersInThisRoom); socket.emit("room-messages", getMessages(room)); }); socket.on("chat-message", (data) => { // console.log(data); addMessage(room, data) roomsNamespace.in(room).emit("chat-message", data); });

de esta forma si quieres más adelante puedes cambiar tu implementación de messageRepository almacenando datos en redis o donde quieras

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda