我使用nodejs和mongodb创建了一个用户登录。我有一台路由器。我在下面删除了一些代码,但我在这个问题中关注的主要路线是/profile
和/logout
路由。
基本上我想在路由制作时将req
或res
数据传递给套接字。由于路由在服务器上,我不知道如何发送数据。我的意思是通常你从客户端发送到服务器,反过来,而不是服务器到服务器。
所以也许我是盲人或者知识不足,但我的问题是如何将数据传递给我的套接字。
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);
});
});
基本上我想将所有已登录的用户存储在对象中,并向所有已登录的用户发送并允许他们进行实时聊天。
看来我需要做的就是将数据传递给我的套接字,所以我确信传递数据很简单,但我不知道怎么做!
谢谢!
答案 0 :(得分:0)
客户端代码,但用户名应该是唯一的
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);
});