在socket io对象中创建一个新prop,并使用react.js作为客户端获取未定义

时间:2017-08-15 07:34:45

标签: node.js express socket.io

我试图将数据存储到套接字支柱中,以后我可以引用它。但是,在其他socket.on它出来的未定义

以下是代码:

var userlist = ['Dang Huy','Alice','Bui Sam', 'Hai Hai'];
var onlineUser = [];

io.on('connection', socket => {
socket.on('userOnline', (data) => { //User Alice go in
    if(userlist.includes(data)){ 
      onlineUser.push(data); 
      io.sockets.emit('onlineUser', onlineUser);
    }
socket.user_name = data; // store data into user_name
console.log(socket.user_name + ' is online');  //logout Alice is online
})

socket.on('userSendMessage', (data) => {
    console.log(socket.user_name) // socket.user_name is undefined here!!
    console.log(data) // still log out the message from the client side

    io.sockets.emit('serverSendMessage', 'Hello')
  })

socket.on('disconnect', function(){
    onlineUser.splice(onlineUser.indexOf(socket.user_name), 1)
    io.sockets.emit('onlineUser', onlineUser)
  })

})

2 个答案:

答案 0 :(得分:0)

你对下一个事件的意思是什么(你能提供一个例子吗?)哦,我注意到一些非常错误的事情,你永远不会去某个事件,这是完全正常的,你的套接字范围变量是{{{ 1}}&你问他们,只是移动听众:

{}

答案 1 :(得分:0)

我自己发现了。问题是:我使用Reactjs作为前端框架,因此每个组件都有不同的套接字会话,因此如果我在同一个组件中调用socket.emit(' userSendMessage'),则定义了socket.username连接到。如果我在其他组件中使用socket.emit(' userSendMessage'),由于每个组件的会话不同,它将返回undefined。