2016-08-08 3 views
0

Я пытаюсь отправить сообщение конкретному пользователю на nodejs, а затем сохранить socket.id и nickname как имя пользователя в массив, а затем получить это, чтобы отправить сообщение, но я получаю эту ошибку: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 [имя пользователя]' явно не то, что вы есть, и вместо этого возвращает 'undefined', вероятно, потому, что полученный ключ в аргументе обратных вызовов неверен. – adeneo

+0

Имя пользователя не пусто –

ответ

1

usernames[username] не определен для данного username, из-за один или несколько из следующих вещей:

  1. Ваш данный username не соответствует data.username подключен еще и/или
  2. Вы пытаетесь вызвать emit на номер, а не сокет (usernames[data.username] = socket.id;), и/или
  3. Объект usernames не когда вы пытаетесь использовать его в обработчике событий requestMoney.

Я бы хотел поставить ставку на # 2.

Смежные вопросы