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