我与私信聊天,但私信不起作用。 这是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'
我如何解决所有这些问题?
提前致谢!
答案 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);
现在它运作正常!