我是node/socket的新手。用一个旧的教程制作一个聊天室。
下面是socket.js部分:
exports.initialize = function (server) {
io = io.listen(server);
var chatInfra = io.of("/chat_infra")
.on("connection", function(socket){
socket.on("set_name", function (data) {
socket.set('nickname', data.name, function () {
socket.emit('name_set', data);
socket.send(JSON.stringify({type:'serverMessage',
message:'Welcome to the most interesting ' +
'chat room on earth!'}));
socket.broadcast.emit('user_entered', data);
});
});
});
var chatCom = io.of("/chat_com")
.on("connection", function (socket) {
socket.on('message', function (message) {
message = JSON.parse(message);
if (message.type == "userMessage") {
socket.get('nickname', function (err, nickname) {
message.username = nickname;
socket.broadcast.send(JSON.stringify(message));
message.type = "myMessage";
socket.send(JSON.stringify(message));
});
}
});
});
}
但是我得到
TypeError: Object #<Socket> has no method 'set'
at Socket.<anonymous> (/home/me/awesome-chat/routes/sockets.js:9:18)
我使用的是"socket.io": "^1.4.8"
,我知道set()
是不赞成的,所以我试图改变设置部分使用.use()
作为每个文档的例子,但我没有运气,并得到:
TypeError: Object #<Socket> has no method 'use'
.get()部分也是如此。所以我真的很困惑,谢谢你的提示。
Socket#set
和Socket#get
不是Socket的方法。IO,所以不能用。然后必须删除这些方法。
你可以像这样赋值
插座。昵称= 'Hola'并按原样读取
要在代码中获取该值,可以这样做
.on("connection", function (socket) {
socket.on('message', function (message) {
message = JSON.parse(message);
if (message.type == "userMessage") {
if(socket && socket.nickname){
message.username = socket.nickname;
socket.broadcast.send(JSON.stringify(message));
message.type = "myMessage";
socket.send(JSON.stringify(message));
};
}
});
});
详情请参阅Socket.IO API
这里是更新后的Socket.io