簡體   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