2016-08-08 136 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上下注。

相關問題