Nodejs将服务器数据传递给套接字

Nodejs pass server data to the socket?

本文关键字:套接字 数据 服务器 Nodejs      更新时间:2023-09-26

我用nodejs和mongodb创建了一个用户登录。我有一个路由器。我在下面剥离了一些代码,但是我在这个问题中关心的主要路由是/profile/logout路由。

基本上我想在路由建立时将reqres数据传递给套接字。由于路由在服务器上,我不确定如何发出数据。我的意思是,通常是从客户端发送到服务器,而不是从服务器发送到服务器。

所以也许我是盲目的或不够了解,但我的问题是我如何将数据传递到我的套接字。

module.exports.initialize = function(app, passport) {
    app.get('/profile', isLoggedIn, function(req, res) {
        res.render('profile', { user : req.user });
        //socket.emit('user loggedIn', { user : req.user })
    });
    app.get('/logout', function(req, res) {
        req.logout();
        res.redirect('/');
    });

    // route middleware to make sure a user is logged in
    function isLoggedIn(req, res, next) {
        if (req.isAuthenticated())
            return next();
        res.redirect('/');
    }
};

旁注:我的套接字代码位于我的server.js所以例子。

var users = {};
io.sockets.on('connection', function (socket) {
    // Listen to a new user then emit the user to all clients
    socket.on('user loggedIn', function (data) {
        socket.userName = data;
        users[socket.userName] = socket;
        io.sockets.emit('user name', Object.keys(users));
        console.log(users);
    });
});

基本上,我想把所有登录的用户存储在一个对象中,并向客户端发送所有登录的用户,并允许他们进行实时聊天。

它似乎所有我需要做的是传递数据到我的套接字,所以我确信传递数据是简单的,但我不知道如何!

谢谢!

客户端代码但用户名必须唯一

socket.emit('myname',{username:'uniqueid});

服务器端代码

var onlineuser=[];
socket.on('myname',function(data){
                      socket.username=data.username;
                   onlineuser.push(data.username);
                   io.sockets.emit('onlineuser',onlineuser);
              });
  socket.on('disconnect',function()
          {
              var i=onlineuser.indexOf(socket.username);
                 onlineuser.splice(i,1);
              io.sockets.emit('onlineuser',onlineuser);
          });