【问题标题】:Nodejs Cannot read property 'emit' of undefined errorNodejs无法读取未定义错误的属性“发出”
【发布时间】:2018-04-27 20:11:45
【问题描述】:

我正在尝试向 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 !!'});
        });
    });

【问题讨论】:

标签: javascript node.js


【解决方案1】:

usernames[username] 对于给定的username 未定义,原因是以下一项或多项:

  1. 您给定的username 与尚未连接的data.username 不匹配,和/或
  2. 您正在尝试通过号码而不是套接字 (usernames[data.username] = socket.id;) 调用 emit,和/或
  3. 当您尝试在 requestMoney 事件处理程序中使用 usernames 对象时,它不在范围内。

我想对#2 ​​下注。

【讨论】:

    【解决方案2】:
        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});
                }
            });
        });
    

    【讨论】:

      猜你喜欢
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      相关资源
      最近更新 更多