我有一个使用socket.io的Node.js项目。在其中,我尝试将客户端中的对象发送到服务器,如下所示:
socket.send(JSON.stringify({'type':'msg','message':'test'}));
当它到达服务器时,我在其上调用JSON.parse
,然后检查是否object.type == 'msg'
。当我运行代码并调用console.log(object.type)
时,它返回"msg"
,但object.type == 'msg'
返回false。这是怎么回事?
编辑:
失败的代码的相关部分是:
client.on('message', function(message, client){
var envelope = JSON.parse(message);
console.log(envelope.type);
if(envelope.type == "msg") { console.log("yay!"); }
}
每当收到消息时,都会打印msg
,但不会打印yay!
。
答案 0 :(得分:0)
您是否已尝试在JSON消息中使用非文字作为键?我正在使用JSON消息构建一个小型聊天服务器来探索socket.io。这是我的相关代码:
客户端:
var jsonMsg = {
action: 'SEND',
body: msg,
name: name.val()
};
socket.send(JSON.stringify(jsonMsg));
请注意,msg和name.val()都是字符串值,从相应的输入字段中抓取。
服务器端:
client.on('message', function(m, c) {
// parse message
var msg = json.parse(m);
switch (msg.action) {
case 'SEND':
// send message to channel
var broadCast = {
posted: date.toReadableDate(new Date(), 'timestamp'),
message: msg.body,
name: msg.name
};
socket.broadcast(json.stringify(broadCast));
break;
}
});
注意:toReadableDate
是一种自定义原型方法。
邮件在服务器上正确收到,在客户端收到广播。
答案 1 :(得分:0)
也许这是一个节点错误?我刚刚在0.5.0-pre中试过它,它在有限的环境中工作正常。
> message = JSON.stringify({'type':'msg','message':'test'})
'{"type":"msg","message":"test"}'
> var envelope = JSON.parse(message);
> console.log(envelope.type);
msg
> if(envelope.type == "msg") { console.log("yay!"); }
yay!
其他选项可能是编码问题(在终端上看起来像“msg”但严格来说不是字符串中的那些字符?)
答案 2 :(得分:-1)
您的邮件必须采用“{”类型“:”msg“}'的格式。