繁体   English   中英

尝试在socket.io中获取用户名并发出消息

[英]Trying to get username in socket.io and emitting a message

好吧,所以我半w以自己想要的方式工作。 这是我修改的代码:

//Route to game app
app.get('/game', function (req, res) {
  if (req.user) {
    res.render('game');

    // Socket stuff
    io.on('connection', function (socket) {

      var dataObj = {
        id: req.user.id,
        username: req.user.username,
      };
      socket.emit('startup', dataObj);
      console.log(dataObj.username);

      // Server Time
      var interval = setInterval(function () {
          var momentNow = moment();
          var data = momentNow.format('LT');
          socket.emit('time', data);
        }, 60000);

      // Chat - Needs work
      socket.on('chat', function (msg) {
        message = msg;
        io.emit('message', { message: message });
      });
    });
  } else {
    req.flash('error', 'You need to be signed in!');
    res.redirect('/');
  }
});

我不得不以这种方式结束,因此可以在socket.io部分中定义我的用户表。 现在的问题是...它说未定义的客户端:

socket.on('startup', function (dataObj) {
  console.log(dataObj.username);
});

它说用户是未定义的,但是服务器端是定义的,为什么不像逻辑那样进行传递呢?

在服务器端进行更改

io.emit('message', {message: message, username : username }

和在客户端上

 socket.on('message',function(data) {
    // do something with data
       var message = data.message
       var name = data.username
 });

在客户端尝试以下操作:

$(function(){

var username =  prompt("Enter your name");
var userObj = {username: username}

$('#chat').load('chat.ejs', function () {
  $('button#test').click(function () {
    console.log('this is a test');
  });

  $('#chat-form').submit(function (event) {
    event.preventDefault();

    var msg = $('#m').val();
    console.log(msg);
    $('#m').val('');

    if (!connected || msg == '') {
      return false;
    }

    userObj.message = msg;

    socket.emit('chat', userObj);
  });

  // Populat chat
  socket.on('message', function (data) { 

    $('#messages').append($('<li>').html(data.username + ': ' + data.message));
  });
});
})

在服务器上:

io.on('connection', function (socket) {

var interval = setInterval(function () {
      var momentNow = moment();
      var data = momentNow.format('LT');
      socket.emit('time', data);
    }, 60000);

  // Chat - Needs work
  socket.on('chat', function (data) {  
    io.emit('message', data);
  });
});

好的,尽管我觉得这有点奇怪:

  var userObj = {
    id: req.user.id,
    username: req.user.username,
  };
  var dataObj = {
    id: userObj.id,
    username: userObj.username,
  };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM