与chat node.js不同的页面
我从node.js开始,在我的第一个示例中,我创建了一个聊天室。这个字符有两个页面,第一个页面(index.jade)用户插入您的昵称,第二个页面(chat.jade)用户可以与其他用户聊天 我有两个问题 第一:当用户插入你的名字时,系统会更改页面(chat.jade)并返回你写的名字,但是代码(io.sockets.emit('昵称',昵称);)不会执行,我想这是因为当页面更改时,没有加载客户端的功能(socket.on('昵称',函数(数据){…)。为什么 第二个问题: 当用户发送消息时,服务器发送一个包含用户和消息的json,但客户端得到的用户为null,消息正确。为什么用户为null 代码:与chat node.js不同的页面,node.js,chat,Node.js,Chat,我从node.js开始,在我的第一个示例中,我创建了一个聊天室。这个字符有两个页面,第一个页面(index.jade)用户插入您的昵称,第二个页面(chat.jade)用户可以与其他用户聊天 我有两个问题 第一:当用户插入你的名字时,系统会更改页面(chat.jade)并返回你写的名字,但是代码(io.sockets.emit('昵称',昵称);)不会执行,我想这是因为当页面更改时,没有加载客户端的功能(socket.on('昵称',函数(数据){…)。为什么 第二个问题: 当用户发送消息时,服
index.jade
$('#表单登录')。提交(函数(){
变量昵称=$('#昵称').val();
如果(昵称!=''){
socket.emit('login',昵称,函数(数据){
如果(!数据){
返回false;
}
});
}
});
杰德先生
$('btnSendMessage')。在('click',function()上{
var message=$(“#message”).val();
如果(消息!=''){
发出('sendMessage',message);
$('#message').val('');
$(“#消息”).focus();
}
});
socket.on('昵称',函数(数据){
var$p=$(''+data+'');
$('.users')。追加($p);
});
//app.js
var昵称=[];
io.sockets.on('connection',函数(socket){
socket.on('login',函数(数据,回调){
if(昵称.indexOf(数据)!=-1){
回调(假);
}否则{
回调(true);
昵称。推送(数据);
socket.set('昵称',数据);
io.sockets.emit('昵称',昵称);
}
});
socket.on('sendMessage',函数(数据){
socket.get('昵称',函数(err,name){
console.log('昵称:'+名称);
});
var message={“昵称”:socket.nickname,“数据”:data};
io.sockets.emit('userMessage',message);
});
});
chat.jade
时,它会建立新的套接字连接,而没有设置socket.nickname
并且您应该使用socket.get('nickname')
,这是一个异步函数使用或类似的框架构建单页应用程序,以防止刷新和断开连接我理解。有没有办法在不同的页面中保持相同的套接字???@AgustinCastro,一种方法是构建单页应用程序,就像我给你的示例一样,在视图之间导航实际上不会刷新页面,从而保持e套接字连接。另一种方法是使用会话,并将所有数据保留在会话中,并将套接字用作客户端和服务器之间的传输手段。我将尝试这两种方法。1.如果我想更改视图而不刷新页面,请使用ajax?2。你能给我一个页面,说明如何使用套接字会话吗??
index.jade
$('#form-login').submit(function(){
var nickname = $('#nickname').val();
if(nickname !== ''){
socket.emit('login',nickname, function(data){
if(!data){
return false;
}
});
}
});
chat.jade
$('#btnSendMessage').on('click',function(){
var message = $("#message").val();
if(message != ''){
socket.emit('sendMessage',message);
$('#message').val('');
$('#message').focus();
}
});
socket.on('nicknames',function(data){
var $p = $('<p>'+data+'</p>');
$('.users').append($p);
});
//app.js
var nicknames = [];
io.sockets.on('connection', function(socket) {
socket.on('login', function(data, callback){
if (nicknames.indexOf(data) != -1){
callback(false);
}else{
callback(true);
nicknames.push(data);
socket.set('nickname', data);
io.sockets.emit('nicknames', nicknames);
}
});
socket.on('sendMessage', function(data){
socket.get('nickname', function(err, name){
console.log('nickname: '+name);
});
var message = { "nickname":socket.nickname, "data":data };
io.sockets.emit('userMessage', message);
});
});