Node.js socket.on未侦听事件

Node.js socket.on未侦听事件,node.js,reactjs,socket.io,Node.js,Reactjs,Socket.io,我正在使用react.js、node.js和socket.io创建一个简单的私人和群组聊天应用程序。我在表单提交上发出了一个事件。在服务器端和客户端,我倾听了那个事件 它在服务器端工作正常,但在客户端它没有监听事件。下面是我的客户端和服务器端代码: 服务器: var users = {}; io.on('connection', function(socket){ socket.on('user_email', (data) => { console.log('u

我正在使用react.js、node.js和socket.io创建一个简单的私人和群组聊天应用程序。我在表单提交上发出了一个事件。在服务器端和客户端,我倾听了那个事件

它在服务器端工作正常,但在客户端它没有监听事件。下面是我的客户端和服务器端代码:

服务器:

var users = {};
io.on('connection', function(socket){ 
    socket.on('user_email', (data) => {
        console.log('user_email event called!');
        users[data.email] = socket.id;
    });
    socket.on('sent_message',(data)=>{
        console.log('data is ',data);
    })
});
客户:

import socket from '../../socket';

handleSubmit(e){
     e.preventDefault();
     let email = window.localStorage.getItem('email');      
     let message = this.state.message;
     if(message){
        socket.emit('sent_message',{email:email,message:message});
    }
    socket.on('sent_message',(data)=>{
        console.log('client side',data);
    })
}
socket.js

import socketIOClient from "socket.io-client";
import { CONFIG } from './config';

export default socketIOClient(CONFIG.API_BASE_URL);

在客户端代码中,您有:

socket.emit('sent_message',{email:email,message:message});

// and

socket.on('sent_message',(data)=>{
    console.log('client side',data);
})
在你们的服务器上

socket.on('sent_message',(data)=>{
    console.log('data is ',data);
})
但是在您的服务器上,没有
…emit('sent_message',…)
,因此您的客户端将永远不会收到任何东西

试用

io.to(socket.id).emit('sent_message', data);

在服务器代码中,在('sent_message',…)处理程序的
socket.on内,而不是
console.log('data is',data)

在配置文件中,我可以在socket.on内使用socket.emit吗?使用
io.to(socket.id).emit()
将发射发送到该套接字。如果您希望所有连接的客户端都能接收,您可以使用
.broadcast()
,但现在,请尝试此方法来解决问题。另外,回答你的问题,你也应该能够做到。我正在实现群聊,所以我不需要使用io.to(socket.id).emit吗?如果你在进行群聊,你需要使用名称空间或聊天室来隔离谁收到了消息。它仍将广播,但仅限于订阅的用户,如
/group1
,等等-请参见我添加的socket.broadcast.emit和socket.emit,现在它工作正常