我从 node.js 开始,在我的第一个示例中,我正在创建一个聊天。这个字符有两个页面,第一个(index.jade)用户插入您的昵称,第二个页面(chat.jade)用户可以与其他用户聊天。
我有两个问题。
第一个:当用户插入您的姓名时,系统会更改页面(chat.jade)并返回您写的姓名但代码(io.sockets.emit('nicknames',nicknames);)没有执行,我认为这是因为当页面更改时没有加载 de funcion en el client (socket.on('nicknames',function(data){ .....) 。为什么??
第二个问题:当用户发送消息时,服务器发送一个带有用户和消息的json,但客户端得到用户为空并且消息正确。为什么用户为空??
代码:
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);
});
});