- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我请求你的支持......我有以下结构超摘要:
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/
这个问题在这里已经有了答案: “return” and “try-catch-finally” block evaluation in scala (2 个回答) 7年前关闭。 为什么method1返
我有一个动态列表,需要选择最后一项之前的项目。 drag your favorites here var lastLiId = $(".album
我想为每个线程执行特定操作,因此,我认为tearDown Thread Group 不起作用。 是否有任何替代方法可以仅在线程的最后一次迭代时运行“仅一次 Controller ”? 谢谢。 最佳答案
在我的书中它使用了这样的东西: for($ARGV[0]) { Expression && do { print "..."; last; }; ... } for 循环不完整吗?另外,do 的意义何
我想为每个线程执行特定操作,因此,我认为tearDown Thread Group 不起作用。 是否有任何替代方法可以仅在线程的最后一次迭代时运行“仅一次 Controller ”? 谢谢。 最佳答案
有没有可能 finally 不会被调用但应用程序仍在运行? 我在那里释放信号量 finally { _semParallelUpdates.Re
我收藏了 对齐的元素,以便它们形成两列。使用 nth-last-child 的组合和 nth-child(even) - 或任何其他选择器 - 是否可以将样式应用于以下两者之一:a)最后两个(假设
我正在阅读 Jon Skeet 的 C# in Depth . 在第 156 页,他有一个示例, list 5.13“使用多个委托(delegate)捕获多个变量实例化”。 List list = n
我在 AM4:AM1000 范围内有一个数据列表(从上到下有间隙),它总是被添加到其中,我想在其中查找和总结最后 4 个结果。但我只想找到与单独列相对应的结果,范围 AL4:AL1000 等于单元格
我最近编写了一个运行良好的 PowerShell 脚本 - 然而,我现在想升级该脚本并添加一些错误检查/处理 - 但我似乎被第一个障碍难住了。为什么下面的代码不起作用? try { Remove-
这个问题在这里已经有了答案: Why does "a == x or y or z" always evaluate to True? How can I compare "a" to all of
使用 Django 中这样的模型,如何检索 30 天的条目并计算当天添加的条目数。 class Entry(models.Model): ... entered = models.Da
我有以下代码。 public static void main(String[] args) { // TODO Auto-generated method stub
这个问题在这里已经有了答案: Why does "a == x or y or z" always evaluate to True? How can I compare "a" to all of
这个问题已经有答案了: Multiple returns: Which one sets the final return value? (7 个回答) 已关闭 8 年前。 我正在经历几个在工作面试中
$ cat n2.txt apn,date 3704-156,11/04/2019 3704-156,11/22/2019 5515-004,10/23/2019 3732-231,10/07/201
我可以在 C/C++ 中设置/禁用普通数组最后几个元素的读(或写)访问权限吗?由于我无法使用其他进程的内存,我怀疑这是可能的,但如何实现呢?我用谷歌搜索但找不到。 如果可以,怎样做? 因为我想尝试这样
我想使用在这里找到的虚拟键盘组件 http://www.codeproject.com/KB/miscctrl/touchscreenkeyboard.aspx就像 Windows 中的屏幕键盘 (O
我正在运行一个 while 循环来获取每个对话的最新消息,但是我收到了错误 [18-Feb-2012 21:14:59] PHP Warning: mysql_fetch_array(): supp
这个问题在这里已经有了答案: How to get the last day of the month? (44 个答案) 关闭 8 年前。 这是我在这里的第一篇文章,所以如果我做错了请告诉我...
我是一名优秀的程序员,十分优秀!