javascript - Nodejs pass server data to the socket? -
i created user login nodejs , mongodb. have router. stripped of code out below, main routes concerned in question /profile
, /logout
routes.
basically want pass req
or res
data socket when route made. since routes on server not sure how emit data. mean typically emit client server , other way around, not server server.
so maybe being blind or not knowledgeable enough, question how can pass data socket.
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 make sure user logged in function isloggedin(req, res, next) { if (req.isauthenticated()) return next(); res.redirect('/'); } };
side note: socket code sits in server.js example.
var users = {}; io.sockets.on('connection', function (socket) { // listen new user emit user 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); }); });
basically want store logged in users inside object , emit client logged in users , allow them have live chat.
it appears need pass data socket, sure passing data simple, dont know how!
thanks!
clint side code username should unique
socket.emit('myname',{username:'uniqueid});
server side code
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); });
Comments
Post a Comment