这是我的客户端基于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:无法读取属性' roomName'在Socket中未定义。
你能告诉我如何解决这个问题吗?我的目标是从客户那里获得房间名称,这样我就能让他们加入那个特定的房间!
我很困惑如何在平台不同时实现这一点,客户端是java,服务器是js。
答案 0 :(得分:0)
你只是检查roomName是否为null,javascript的东西是它有多个类似null的类型。未定义的是其中一个是roomName设置的,roomName未定义。你只是检查它是否为空,这不是。它未定义。
您在顶部创建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分配一些内容。