在Nodejs中没有关于任何其他用户的最新发布信息

我请求你的支持…我有以下结构的超级总结:

variable1 = "username bd successfully extracted in Mysql, here there is no problem, and I checked" io.sockets.on ('connection', function (socket) { socket.emit ('initialize', {username: variable1} } 

正如你将了解我有几个用户连接,如果例如我有5个连接一个接一个,如果所有(CONNECTED)更新浏览器,所有自动inheritance最后一个用户显然不希望的名称,每个人应该有自己的名字。 我试图通过实现会话来解决它,但不允许我在io.sockets.on('connection',function(socket))中使用它们。

我希望任何人都可以解决这个问题,我再次感谢你的宝贵帮助。


不,我把连接关了。 为了更好地理解我,我会发布我的代码,也许你可以帮助我(如果我有任何不适,请原谅我)。 我的语言是西class牙语,但使用谷歌翻译来帮助我解释我的问题,希望不会混淆。 在西class牙语,没有太多的信息,我build议使用passport.js,但我是一个初学者,不知道如何执行它,删除什么,应该被删除工作…请求帮助,请。 非常感谢你!

我的代码是:

 var port = process.env.PORT || 3000; /** * Module dependencies. */ var express = require('express') , routes = require('./routes') , user = require('./routes/user') , http = require('http') , path = require('path') , mysql = require('mysql'); var crypto = require('crypto'); var app = express(); server = http.createServer(app); var io = require('socket.io').listen(server); server.listen(port); /*http.createServer(app).listen(3000, function(){ console.log("Express server listening on port " + 3000); });*/ app.configure(function(){ /*app.set('port', process.env.PORT || 3000);*/ app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('your secret here')); app.use(express.session({secret: 'esto es secreto'})); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); }); app.configure('development', function(){ app.use(express.errorHandler()); }); var db_config = { host: 'localhost', user: 'user', password: 'password', database: 'db_name' }; var coneccion; function handleDisconnect() { coneccion = mysql.createConnection(db_config); // Recreate the connection, since // the old one cannot be reused. coneccion.connect(function(err) { // The server is either down if(err) { // or restarting (takes a while sometimes). console.log('error when connecting to db:', err); setTimeout(handleDisconnect, 2000); // We introduce a delay before attempting to reconnect, } // to avoid a hot loop, and to allow our node script to }); // process asynchronous requests in the meantime. // If you're also serving http, display a 503 error. coneccion.on('error', function(err) { console.log('db error', err); if(err.code === 'PROTOCOL_CONNECTION_LOST') { // Connection to the MySQL server is usually handleDisconnect(); // lost due to either server restart, or a } else { // connnection idle timeout (the wait_timeout throw err; // server variable configures this) } }); } handleDisconnect(); function login(req, res, next){ if(req.session.user){ next(); }else{ res.redirect('/login'); } } function encriptar(cadena){ var myString = cadena; return crypto.createHash('md5').update(myString).digest("hex"); } app.get('/', routes.index); app.get('/users', user.list); // pagina que renderiza el formulario del login. app.get('/login', function(req, res){ res.render('login', {title: 'Ingreso'}); }); app.get('/principal', login, function(req, res){ res.sendfile(__dirname + '/public/pantalla_principal.html'); }); app.get('/profesor', login, function(req, res){ res.sendfile(__dirname + '/public/pantalla_profesor.html'); }); app.post('/autenticar', function(req, res){ //var connection = BD(); var user = req.body.txtUsuario; var clave = encriptar(req.body.txtClave); coneccion.query('SELECT * FROM sm_usuario WHERE nombre="'+ user +'" and contrasena="'+ clave +'"' , function(error, resultado, fila){ if(!error){ if(resultado.length>0){ console.log("EL ID DEL USUARIO ES: "+ resultado[0].id_usuario); coneccion.query('SELECT * FROM sm_alumno WHERE id_usuario="'+ resultado[0].id_usuario +'"', function(error, resultado2, fila2){ if(!error){ req.session.user = user; nivel_acceso = resultado[0].nivel_acceso; avatar = resultado[0].id_avatar; id_usuario = resultado[0].id_usuario; nombre_completo = resultado2[0].nombre; id_grado = resultado2[0].id_grado; id_colegio = resultado2[0].id_colegio; id_ubigeo = resultado2[0].id_ubigeo; coneccion.query('SELECT c1 FROM sm_colegio WHERE id="'+ resultado2[0].id_colegio +'"', function(error, resultado3, fila3){ if(!error){ colegio = resultado3[0].c1; // averiguamos en qué departamento esta el alumno coneccion.query('SELECT * FROM ubigeo WHERE id="'+ resultado2[0].id_ubigeo +'"', function(error, resultado4, fila4){ if(!error){ departamento = resultado4[0].dep; id_dep = resultado4[0].iddep; id_pro = resultado4[0].idpro; id_dis = resultado4[0].iddis; if(nivel_acceso=="1"){ res.redirect('/principal'); }else if(nivel_acceso=="2"){ res.redirect('/profesor'); } }else{ res.send("La información sobre el usuario no está completa - 3"); //res.send(error); } }) }else{ //res.send(error); res.send("La información sobre el usuario no está completa - 2"); } }) }else{ //res.send(error) //res.send("La información sobre el usuario no está completa"); console.log("La información sobre el usuario no está completa"); } }); }else{ //res.send("El usuario no existe o sus datos son incorrectos"); console.log("El usuario no existe o sus datos son incorrectos"); } }else{ console.log("Ocurrio un error: "+ error); } }); }); app.get('/salir', function(req, res){ delete req.session.user; res.redirect('/'); }); conectados = new Array(); io.sockets.on('connection', function (socket) { var tot = conectados.length; conectados[tot] = { "nombre": nombre_completo, "colegio": colegio, "id_usuario": id_usuario, "id_colegio": id_colegio, "id_grado": id_grado, "id_dep": id_dep, "id_pro":id_pro, "id_dis": id_dis, "departamento": departamento } socket.emit('inicializar', {id_usuario: id_usuario, id_colegio: id_colegio, id_grado: id_grado, nombre_completo: nombre_completo, colegio: colegio, id_avatar: avatar, departamento: departamento, id_dep: id_dep, id_pro: id_pro, id_dis: id_dis, nivel_acceso: nivel_acceso}); socket.broadcast.emit('lista_chat_completa', {"usuarios_chat": conectados }) socket.emit('lista_chat_personal', {"usuarios_chat": conectados }) socket.on('mensaje_chat_cliente', function (data) { socket.broadcast.emit('mensaje_chat_servidor', { "nombre": data.nombre, "colegio": data.colegio, "departamento": data.departamento, "mensaje": data.mensaje, "fecha": data.fecha, "hora": data.hora }); }); socket.on('nuevo_post_cliente', function (data){ socket.broadcast.emit('nuevo_post_servidor', { id_dep: data.id_dep, id_pro: data.id_pro, id_dis: data.id_dis, id_grado: data.id_grado, id_avatar: data.id_avatar, comunidad: data.comunidad, id_colegio: data.id_colegio, id_titulo: data.id_titulo, id_usuario: data.id_usuario, nombre_completo: data.nombre_completo, colegio: data.colegio, departamento: data.departamento, texto: data.texto, id_post: data.id_post, fecha: data.fecha, hora: data.hora }); }); socket.on("disconnect", function(){ for(i=0; i<conectados.length; i++){ if(conectados[i].id_usuario==id_usuario){ conectados.splice(i, 1); } } for(i=0; i<conectados.length; i++){ console.log("Nombre: "+ conectados[i].nombre + " Colegio: " + conectados[i].colegio) } socket.broadcast.emit('lista_chat_completa', {"usuarios_chat": conectados }) }); }); 

我的猜测是你的数据库调用是asynchronous的。 您的数据库调用是否在连接事件中? 如果不是,你回来的可能不是你想要的。

你应该有这样的东西:

 io.sockets.on ('connection', function (socket) { mysql.find($query, function(err, variable1) { // This anonymous function is a callback. socket.emit('initialize', { username: variable1 }); }; });