【问题标题】:Node js and Redis Undefined JSON propertyNode js 和 Redis 未定义的 JSON 属性
【发布时间】:2017-06-08 18:46:36
【问题描述】:

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

当我使用这个控制台输出什么是假设:

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

控制台:

在队列 {"message":"A new message!","user":"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 并且它工作得很好。

【问题讨论】:

  • 你可以尝试一次 JSON.parse(data).message 可能是数据是字符串化格式

标签: javascript json node.js redis


【解决方案1】:

你得到的数据对象是一个字符串,而不是一个对象。要获取消息,您应该这样做JSON.parse(data).message

通过查看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);
})

更多信息

【讨论】:

    猜你喜欢
    • 2012-12-04
    • 2018-01-27
    • 1970-01-01
    • 2018-04-02
    • 2015-10-20
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多