【问题标题】:Can't reference proprety name with '-' Nodejs无法使用“-”节点 Js 引用属性名称
【发布时间】:2019-01-21 02:59:19
【问题描述】:

这是我console.log我的对象使用console.log(category)时的输出。

{ _id: 5b723aa57bab2a0b9a0d1429,
updatedBy: 5b62743ac154c5669e9259d0,
updatedAt: 2018-08-14T09:25:20.050Z,
createdBy: 5b62743ac154c5669e9259d0,
createdAt: 2018-08-14T02:12:53.705Z,
name: 'Community Engagement',
__v: 0,
'dialogflow-agent': '8df9fab841554e8badfe2f66c74e08f3' }

但奇怪的是,当我console.log(category["dialogflow-agent"]) 它给了我undefined

有人知道如何访问dialogflow-agent的属性吗?

更新:

JSON.stringify(category) 的输出是:

{"_id":"5b6ac11920bea9751e2847e3","updatedBy":"5b62743ac154c5669e9259d0","updatedAt":"2018-08-14T09:03:54.638Z","createdBy":"5b62743ac154c5669e9259d0","createdAt":"2018-08-08T10:08:25.917Z","name":"Awards and Scholarships","__v":0,"dialogflow-agent":"26d927f3f627496fbacc08ac16af898f"}

【问题讨论】:

  • console.log(object['_id']) 打印什么?您的代码对我来说似乎是正确的。
  • 这可能是异步请求的响应! console.log(typeof object) 记录了什么?
  • 您访问它的方式是正确的,这意味着与您的问题看起来不太一样。当您在 console.log 上暂停时,使用调试器逐步执行代码并检查对象。为了让我们帮助您,请使用 minimal reproducible example 更新您的问题以证明问题。查看console.log(JSON.stringify(category)) 的结果可能也很有用,尽管您显示的 Node.js 表示非常清晰。
  • 不幸的是,无论我们多么想帮助您,我们都无法帮助您(我愿意,我真的很好奇发生了什么)。 :-) 如果对象确实如您添加的 JSON 所暗示的那样,what you're doing works。所以,再一次,有一些事情没有在问题中体现出来。它需要在您的实际情况下进行调试,我们无法从这里进行。但同样,您尝试访问该属性的方式是正确的,并且如果对象具有该属性,确实工作。所以不要担心那部分,你做对了。
  • 既然你提到了一个承诺,你确定你没有在承诺解决之前尝试登录吗?正如您在这个模型中看到的,显示的代码是正确的。 jsfiddle.net/ao2g3vhL/2 所以试着找出根本原因。

标签: javascript json node.js object properties


【解决方案1】:

问题中缺少的是Category 是一个猫鼬模式,该模式中的属性缺少dialogflow-agent

let categorySchema = new mongoose.Schema({
    name: String,
    'dialogflow-agent': String,    // This line was missing.
});

感谢 @Shilly 和 @T.J.Crowder 的帮助,并对问题中缺少的信息表示歉意。但是对于遇到此问题的人,请检查您的架构。

【讨论】:

  • 哇。他们必须使用代理来拦截......不,那么JSON.stringify 也会受到影响。如果它是吸气剂,则相同。多么奇怪。
  • 我完全同意这很奇怪,但是当您通过 getter 访问它们时它们显然会隐藏属性,但当您打印整个对象(实例)时却不会。因此,当我们对整个对象进行字符串化时,它不会隐藏您未定义的属性,是否应该将其报告给猫鼬? :D 这不是很奇怪的行为吗?
  • 问题是,我什至不知道他们是如何做到的,无论是代理还是简单的 getter 都会以 JSON.stringify 的方式表现。我肯定会整理一个minimal reproducible example 并提出一个问题。
  • 那太好了,当你这样做的时候请给我加个标签或者把链接发到这里吗?非常感谢。
  • “我肯定会拼凑起来……”的意思是“如果我处于你的位置,我肯定会拼凑起来……”我不会这样做(尤其是因为我不使用猫鼬)。我建议去做。
猜你喜欢
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
相关资源
最近更新 更多