节点js和Redis未定义的JSON属性

时间:2017-01-24 04:51:43

标签: javascript json node.js redis

当我尝试从redis函数获取JSON属性时,我得到了未定义。

当我使用此控制台时,输出的内容为:

redisClient.on("message", function(channel, data) {
 console.log("new message add in queue "+ data + " channel");
 socket.emit(channel, data);
});

控制台:

  
    

新消息添加到队列中{"消息":"新消息!","用户":" John Doe"}信道

  

当我尝试从数据中获取属性时,我得到了未定义:

redisClient.on("message", function(channel, data) {

  console.log("new message add in queue "+ data['message'] + " channel");
  socket.emit(channel, data);
});
  

新消息添加到队列未定义的通道

我还尝试过这样的数据属性而没有运气

data.message

这很奇怪,因为在我的客户端脚本中我可以使用data.message,它工作得很好。

1 个答案:

答案 0 :(得分:2)

您获得的数据对象是字符串,而不是对象。要收到消息,您应该redisClient

通过查看publish的源代码,您可以注意到on('message')方法和JSON.parse事件正在使用字符串参数。使用try/catch时,建议将其包装在redisClient.on("message", function(channel, data) { try{ data=JSON.parse(data) } catch(e){ return console.log('data is not an JSON string',data) } console.log("new message add in queue "+ data['message'] + " channel"); socket.emit(channel, data); }) 块中。该字符串可能无效,并且将引发错误。

data = [
     [{a: "b", value: 12}, {a: "bb", value: 39}, {a: "bb", value: 150}],
     [{a: "c", value: 15}, {a: "cc", value: 83}, {a: "ccc", value: 12}],
     [{a: "d", value: 55}, {a: "dd", value: 9}, {a: "dd", value: 1}]
   ]

更多信息