gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:02:53 25 4
gpt4 key购买 nike

我请求你的支持......我有以下结构超摘要:

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 个用户一个接一个地连接,如果所有(已连接)更新浏览器,所有用户都会自动继承最后一个用户的名称,这显然不想,每个人都应该有自己的名字。我试图通过实现 session 来修复它,但不允许我在 io.sockets.on ('connection', function (socket)) 中使用它们。

希望之前有人能解决这个问题,再次感谢您的宝贵帮助。


没有。我弄清楚了。为了更好地理解我,我将发布我的代码,也许你可以帮助我(如果我造成任何不适,请原谅我)。我的语言是西类牙语,但使用谷歌翻译来帮助我解释我的问题,希望不会造成混淆。在西类牙语中,没有太多信息,我推荐使用 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 })
});
});

最佳答案

我猜你的数据库调用是异步的。您的数据库调用是否在连接事件中?否则,您返回的可能不是您想要的。

你应该有这样的东西:

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

关于mysql - 在 Nodejs 中没有关于任何其他用户的最后发布信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20450464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com