JSON не сериализуется должным образом ... я думаю? - PullRequest
2 голосов
/ 06 февраля 2011

У меня есть проект Node.js, который использует socket.io. В нем я пытаюсь отправить объект с клиента на сервер следующим образом:

socket.send(JSON.stringify({'type':'msg','message':'test'}));

Когда он прибывает на сервер, я звоню на него JSON.parse и проверяю object.type == 'msg'. Когда я запускаю код и вызываю console.log(object.type), возвращается "msg", а object.type == 'msg' возвращает false. Что здесь происходит?

EDIT:

Соответствующая часть кода, которая терпит неудачу:

client.on('message', function(message, client){
    var envelope = JSON.parse(message);
    console.log(envelope.type);
    if(envelope.type == "msg") { console.log("yay!"); }
}

Всякий раз, когда приходит сообщение, печатается msg, но не yay!.

Ответы [ 3 ]

0 голосов
/ 22 февраля 2011

Вы уже пытались использовать не-литералы в качестве ключей в своем сообщении 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 - это пользовательский метод-прототип.

Сообщение получено правильно на сервере и на стороне клиента как широковещательная.

0 голосов
/ 09 июня 2011

Может быть, это ошибка узла? Я только что попробовал его в 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» на терминале, но не строго эти символы в строке?)

0 голосов
/ 22 февраля 2011

Ваше сообщение должно быть в формате '{"type": "msg"}'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...