web-dev-qa-db-fra.com

Erreur de serveur Redis Nodejs, le client est fermé

Je développe une application dans laquelle les chats doivent être mis en cache et surveillé, il s'agit actuellement d'une application locale où j'ai installé Redis et Redis-Cli. Le problème que je suis confronté est (node:5368) UnhandledPromiseRejectionWarning: Error: The client is closed Attacher un extrait de code ci-dessous

//redis setup
const redis = require('redis');
const client = redis.createClient()//kept blank so that default options are available
  

//runs when client connects
io.on("connect", function (socket) {

  //this is client side socket
  //console.log("a new user connected...");

  socket.on("join", function ({ name, room }, callback) {
    //console.log(name, room);
    const { msg, user } = addUser({ id: socket.id, name, room });
   // console.log(user);
    if (msg) return callback(msg); //accessible in frontend

    //emit to all users
    socket.emit("message", {
      user: "Admin",
      text: `Welcome to the room ${user.name}`,
    });
    //emit to all users except current one
  
    socket.broadcast
      .to(user.room)
      .emit("message", { user: "Admin", text: `${user.name} has joined` });

    socket.join(user.room); //pass the room that user wants to join

    //get all users in the room
    io.to(user.room).emit("roomData", {
      room: user.room,
      users: getUsersInRoom(user.room),
    });

    callback();
  }); //end of join

  //user generated messages
  socket.on("sendMessage",  async(message, callback)=>{
    const user = getUser(socket.id);

    //this is where we can store the messages in redis
    await client.set("messages",message);

    io.to(user.room).emit("message", { user: user.name, text: message });
    console.log(client.get('messages'));
    callback();
  }); //end of sendMessage

  //when user disconnects
  socket.on("disconnect", function () {
    const user = removeUser(socket.id);
    if (user) {
     
      console.log(client)

      io.to(user.room).emit("message", {
        user: "Admin",
        text: `${user.name} has left `,
      });
    }
  }); //end of disconnect

J'obtiens au-dessus de l'erreur lorsque l'utilisateur envoie un message à la pièce ou lorsque socket.on("sendMessage") est appelé.

Où est-ce que je vais mal?

Merci d'avance.

1
Makarand

Vous devriez await client.connect() avant d'utiliser le client

1
Leibale Eidelman