2016-08-08 137 views
0

我试图将消息发送给nodejs上的特定用户,然后将socket.idnickname作为用户名保存到数组中,然后获取该消息,但出现此错误:Nodejs无法读取未定义错误的属性'emit'

Cannot read property 'emit' of undefined 

这是我的代码:

var socket  = require('socket.io'), 
    express  = require('express'), 
    app   = express(), 
    server  = require('http').createServer(app), 
    io   = socket.listen(server); 

    io.sockets.on('connection', function (socket) { 

     socket.on('login', function (data) { 
      login(data.username, data.password, function (success, value) { 
       if (success) { 
        usernames[data.username] = socket.id; 
        socket.emit('login', {result: true, id: value}); 
       } else { 
        socket.emit('login', {result: false}); 
       } 
      }); 
     }); 

     socket.on('requestMoney', function (username) { 
      log.info('username: ' + username); 
      usernames[username].emit('message', {username: 'Hey !!'}); 
     }); 
    }); 
+0

http://stackoverflow.com/questions/32659864/socket-io-typeerror-cannot-read-property-emit-of-undefined –

+2

'usernames [username]'显然不是你的事情,相反,它可能会返回'undefined',可能是因为在回调参数中接收到的键是错误的。 – adeneo

+0

用户名不是空的先生 –

回答

1

usernames[username]是未定义给定username,因为一个或多个以下的事情:

  1. 你给username不匹配data.username接通了,和/或
  2. 你试图调用emit上的数量,而不是一个套接字(usernames[data.username] = socket.id;),和/或
  3. usernames对象不在您尝试在requestMoney事件处理程序中使用它的范围内。

我想在#2上下注。

相关问题