Nodejs无法读取未定义错误的属性'emit'

时间:2016-08-08 19:27:03

标签: javascript node.js

我正在尝试向nodejs上的特定用户发送消息,然后将socket.idnickname作为用户名保存到数组中,然后将其发送给发送消息,但我收到此错误:

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 !!'});
        });
    });

2 个答案:

答案 0 :(得分:1)

由于以下一项或多项原因,

x = [0, 1, 2] y = ''.join(map(str, x)) z = int(y) 未定义给定的usernames[username]

  1. 您指定的username与已连接的username和/或
  2. 不匹配
  3. 您尝试拨打号码data.username,而不是套接字(emit)和/或
  4. 当您尝试在usernames[data.username] = socket.id;事件处理程序中使用usernames对象时,requestMoney对象不在范围内。
  5. 我想打赌#2。

答案 1 :(得分:1)

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