【发布时间】:2017-05-04 18:58:00
【问题描述】:
我与私信聊天,但私信不起作用。 这是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 握手期间出错:“连接”标头值必须包含“升级”
我该如何解决这一切?
提前致谢!
【问题讨论】:
-
你在Node前面使用代理了吗?错误`'Connection' header value must contain 'Upgrade'`表示你有Apache/Nginx/etc。在 Node 前面,它没有为 websockets 设置适当的标头
-
我在 Plesk Onyx 中安装了 Nginx。我该如何配置?
-
阅读本文的“虚拟主机配置”部分:nginx.com/blog/nginx-nodejs-websockets-socketio
-
nginx 没有在我的服务器上运行。其他原因?
标签: javascript ios node.js sockets