为什么我的Node.js Socket.IO服务器只发出一次,却发出多条消息?

时间:2019-01-13 21:37:58

标签: javascript node.js socket.io

问题:

从服务器上查看以下代码段:

io.of("/chat").on("connection", socket => {
  socket.on("joinRoom", (room, name) => {
    chatRooms.forEach(chatRoom => {
      console.log(chatRoom);
      if (chatRoom.users.includes(name.toLowerCase())) {
        console.log("hello");

        return socket.emit("err", "Username already been taken");
      } else {
        chatRoom.users.push(name.toLowerCase());
        socket.join(room);
        io.of("/chat")
          .to(room)
          .emit("newUser", "New user has joined the room");
        return socket.emit("success", "Joined room ", room);
      }
    });
  });

});

尤其是这一行:return socket.emit("err", "Username already been taken");

我这样在客户端捕获它:

socket.on("err", msg => console.error(msg));

所以在客户端上,我有一个简单的表格。此表单向服务器发出“ joinRoom”事件,并提供名称和房间名称。

第一次工作(因为用户是第一个出现在该房间中的人)。第二次单击后,它会发出我上面提到的错误。

我在客户端成功捕获了它。但是问题是,控制台显示了几个输出(看一下红色控制台中的“ 2”。截图上的错误):

enter image description here

这是我要登录但已被使用时的控制台输出。我收到了两次消息。当我再次单击时,它看起来像这样:

enter image description here

所以我的问题是,为什么此事件在第一次点击时被发射2次,而在第二次点击时被发射3次(该数字随着我点击的次数的增加而变得越来越高)。

我知道它没有破坏任何东西,但我只是想了解为什么它会做这种奇怪的事情。

谢谢!

0 个答案:

没有答案