2

我有一个使用 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!

4

3 回答 3

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”,但严格来说不是字符串中的那些字符吗?)

于 2011-06-09T16:15:56.680 回答
0

您是否已经尝试在 JSON 消息中使用非文字作为键?我正在构建一个小型聊天服务器来探索 socket.io,使用 JSON 消息。这是我的相关代码:

客户端:

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是自定义原型方法。

消息在服务器端和客户端作为广播正确接收。

于 2011-02-22T15:47:46.223 回答
-1

您的消息必须采用 '{"type":"msg"}' 格式。

于 2011-02-22T13:58:51.283 回答