这是我基于Android代码(libgdx)的客户端-
public static void updateTheServer() {
JSONObject data = new JSONObject();
try {
data.put("roomName", tf.getText()); //tf is a textbox i take input from
socket.emit("joinRoom",data);
} catch (JSONException e) {
Gdx.app.log("SOCKET.IO", "Error sending room name data");
}
}
这是我在javascript / nodejs-上的服务器代码
var clientInfo={}; //key-Value Pairs
var roomName;
io.on('connection', function (socket){
socket.emit('socketID',{id:socket.id});
socket.on('joinRoom',function(data){
data.id=socket.id;
console.log("Got room name!");
if(!roomName===null){
roomName=data.JSON.parse(roomName);
clientInfo[socket.id]=roomName;
socket.join(roomName);
}
});
我在命令窗口中收到的错误是-“ TypeError:无法读取Socket中未定义的属性'roomName'。
你能告诉我如何解决这个问题吗?我的目标是从客户那里获得房间名称,这样我就可以让他们加入该特定房间!
我对于在平台不同,客户端是Java而服务器是js时如何实现这一点感到困惑。
最佳答案
您只在检查roomName是否为null,使用javascript的事情是它具有多个类似null的类型。 undefined是其中之一,即将roomName设置为的内容,而未定义roomName。您只检查它是否为null,不是。它是未定义的。
您在顶部创建roomName属性,但从未分配任何内容,因此未定义。将您的if语句更改为此:
// This will return false if roomName is null, undefined or 0.
if(!roomName) {
// your code
}
// or alternatively, change the assignment of roomName to
roomName = null;
但是我建议在尝试使用之前给roomName分配一些东西。