node.js socket.io侦听器无法正常工作

时间:2017-05-04 18:58:01

标签: javascript ios node.js sockets

我与私信聊天,但私信不起作用。 这是app.js

var express = require('express'),http = require('http');
var app = express();
var server = http.createServer(app);
console.log("Hola");
app.set('views',__dirname + '/views');

	app.use(express.static(__dirname));

app.get('/',function(req,res){
	res.render('index.jade',{layout:false});
});
app.post('/', function(req, res) {
    if (req.session.logged)
    {
    	res.send('Welcome back!');
    	console.log("Welcome back!");
    }
    else
    {
        req.session.logged = true;
        res.send('Welcome!');
        console.log("Welcome");
    }
});
server.listen(1080);

function tstamp() {
  var currentTime = new Date();
  var days = new Array('Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab');
  var day = currentTime.getDay();
  var hours = currentTime.getHours();
  var minutes = currentTime.getMinutes();
  if (minutes < 10) {
    minutes = "0" + minutes;
  }
  if (hours > 11) {
    var ap = 'p';
  }
  else {
    var ap = 'a';
  }
  if (hours > 12) {
    hours = hours - 12;
  }

  return "["+ days[day] + " " + hours + ":" + minutes + ap + "m] ";
}

//websockets
var io = require('socket.io').listen(server);
var usuariosConectados = {};
var usuariosId ={};
io.sockets.on('connection',function(socket){
	socket.on('enviarNombre',function(dato){
		if(usuariosConectados[dato])
			socket.emit('errorName');
		else
			{
				// store the nickname in the socket session for this client
				socket.nickname = dato;
				//console.log("El usuario es: " + dato);
				usuariosConectados[dato] = socket.nickname;
				usuariosId[dato] = socket.id;
			}
			sId = [dato,usuariosId];
			data = [dato,usuariosConectados];
			io.sockets.emit('mensaje',data);
	});
	socket.on('enviarMensaje',function(mensaje){
		var data = [socket.nickname, mensaje];
		io.sockets.emit('newMessage',data);
	});
	socket.on('mensajePrivado',function(targetUser,msg) {
		//console.log(sId[1][targetUser]);
		//console.log(msg);
		//console.log(socket.id);
		console.log(tstamp());
        io.sockets.socket(sId[1][targetUser]).emit('newPrivado', tstamp(), socket.nickname, targetUser, msg);
        io.sockets.socket(socket.id).emit('newPrivadoSender', tstamp(), socket.nickname, targetUser, msg);
   });
	socket.on('disconnect',function(){
		console.log("Entro a disconnect");
		delete usuariosConectados[socket.nickname];
		data = [usuariosConectados,socket.nickname];
		io.sockets.emit('usuarioDesconectado',data);
	});
});

问题是,当我使用听众“mensajePrivado”时,它永远不会到达那里,我不知道为什么。 socket.on('enviarMensaje')监听器工作正常。

我称之为:

function sendPrivateMessage (targetUser)
{
	console.log("entro en sendPrivateMessage");
	var privateMsg = $('#'+ targetUser + 'privateMsg').val();
	//verificamos que no tenga scripts
	if((privateMsg.indexOf("<") != -1))
	{
		alert("Mensaje incorrecto");
	}
	else if((privateMsg.indexOf(">") != -1))
	{
		alert("Mensaje incorrecto");
	}
	else if((privateMsg.indexOf(";") != -1))
	{
		alert("Mensaje incorrecto");
	}
	else
	{
		$('#'+ targetUser + 'privateMsg').val("");
		console.log(privateMsg);
		console.log(targetUser);
		websocket.emit('mensajePrivado', targetUser, privateMsg);
	}
}

此外,当我在Chrome浏览器中检查元素时,我收到以下错误 失败:WebSocket握手期间出错:'Connection'标头值必须包含'Upgrade'

我如何解决所有这些问题?

提前致谢!

1 个答案:

答案 0 :(得分:0)

好的问题出在这一部分:

io.sockets.socket(sId[1][targetUser]).emit('newPrivado', tstamp(), socket.nickname, targetUser, msg);
    io.sockets.socket(socket.id).emit('newPrivadoSender', tstamp(), socket.nickname, targetUser, msg);

我替换为:

io.to(sId[1][targetUser]).emit('newPrivado', tstamp(), socket.nickname, targetUser, msg);
    io.to(socket.id).emit('newPrivadoSender', tstamp(), socket.nickname, targetUser, msg);

现在它运作正常!