当我尝试从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,它工作得很好。
答案 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}]
]
更多信息: