Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON未正确序列化。。。我想?_Javascript_Json_Node.js_Socket.io - Fatal编程技术网

Javascript JSON未正确序列化。。。我想?

Javascript JSON未正确序列化。。。我想?,javascript,json,node.js,socket.io,Javascript,Json,Node.js,Socket.io,我有一个Node.js项目,它使用socket.io。在其中,我尝试将对象从客户端发送到服务器,如下所示: socket.send(JSON.stringify({'type':'msg','message':'test'})); 当它到达服务器时,我对其调用JSON.parse,并检查object.type=='msg'。当我运行代码并调用console.logobject.type时,它返回msg,但object.type=='msg'返回false。这是怎么回事 编辑: 代码中失败的相关

我有一个Node.js项目,它使用socket.io。在其中,我尝试将对象从客户端发送到服务器,如下所示:

socket.send(JSON.stringify({'type':'msg','message':'test'}));
当它到达服务器时,我对其调用JSON.parse,并检查object.type=='msg'。当我运行代码并调用console.logobject.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!"); }
}

无论何时收到消息,都会打印消息,但不会打印

您的邮件格式必须为“{type:msg}”

您的邮件格式必须为“{type:msg}”

您是否已经尝试在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是一个自定义原型方法


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

您是否已经尝试在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是一个自定义原型方法


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

可能是节点错误?我刚刚在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.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,但严格来说不是字符串中的字符吗?

您能给我们看一些服务器代码吗?现在我想不出任何失败的原因。你说…它返回msg,…,它不应该返回一个带有msg的对象吗?尝试注入console.logmessage;作为函数的第一行。另外,检查typeof envelope.type,如果它没有读取字符串,那么这将解释为什么比较失败。@Martin He使用==所以类型在这里并不重要,我怀疑的是节点吞没了第二个日志调用,我过去有过这样的问题。@Ivo问题是第二个console.log调用之后的代码也没有被调用,和其他双日志以前也有过。你能给我们看看你的服务器代码吗?现在我想不出任何失败的原因。你说…它返回msg,…,它不应该返回一个带有msg的对象吗?尝试注入console.logmessage;作为函数的第一行。另外,检查typeof envelope.type,如果它没有读取字符串,那么这将解释为什么比较失败。@Martin He使用==所以类型在这里并不重要,我怀疑的是节点吞没了第二个日志调用,我过去有过这样的问题。@Ivo问题是第二个console.log调用之后的代码也没有被调用,和其他双日志以前也有过。这不会有什么区别,密钥是由客户端解析的,因此它们是否正确编码也不会有什么区别。您使用的是哪个json序列化库?我的示例使用,可能这就是双方的caveat.V8。使用单独的JSON库效率低下。您是否尝试过在两端使用json2.js?除了一些空字符外,我看不到任何其他问题的来源,但这应该不会发生。这不会有什么区别,密钥是由客户端解析的,因此它们是否正确编码也不会有什么区别。您使用的是哪个json序列化库?我的示例使用,可能这就是双方的caveat.V8。使用单独的JSON库效率低下。您是否尝试过在两端使用json2.js?我看不到你的问题的任何其他来源,除了一些空字符,但这真的不应该发生。