2016-08-08 6 views
0

私はそれがメッセージを送信するために取得、その後、配列にユーザ名としてsocket.idnicknameを保存し、nodejs上の特定のユーザーにメッセージを送信しようとしているが、私はこのエラーを取得:Nodejsプロパティを読み取ることができません「放出」

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]'は明らかにあなたのものではありません。 callbacks引数の受け取ったキーが間違っているために、代わりに 'undefined'を返します。 – adeneo

+0

ユーザー名は空ではありません –

答えて

1

usernames[username]があるため、次のもののうちの1つ以上の、与えられたusernameのための定義されていません:

  1. あなたはdata.usernameはまだ接続、および/または
  2. あなたは数ではなく、ソケット(usernames[data.username] = socket.id;)にemitを呼び出そうとしている、および/または一致しないusernameを与え
  3. usernames対象ではありませんあなたがrequestMoneyイベントハンドラでそれを使用しようとしているときに範囲内にあります。

#2に賭けをしたいと思います。

関連する問題