Node JS Inspect显示属性有值但是检查属性返回undefined

时间:2015-07-29 16:36:40

标签: javascript node.js mongodb mongoose coffeescript

我正在使用Node JS应用程序,使用Coffeescript和Mongoose以及MongoDB数据库。

我有一个像这样的Mongoose模型:

Client = mongoose.model 'Client', mongoose.Schema

    # Basics
    name: String
    email: String
    api_key: String

    # Modules enabled / disabled
    modules: Object

    # Settings for modules
    reporting: Object
    filter: Object
    templates: Object
    datatypes: Object

modules属性是一个包含键的对象,其中一个布尔值指示是否应该加载一个模块(请参阅本文中的console.log输出)。下面的四个属性是特定模块的设置。

当我的应用程序启动时,我会为当前用户加载此信息,并将数据分配给配置变量,如下所示:

config.name = clients[0].name
config.api_key = clients[0].api_key

config.modules =
    reporting_enabled: clients[0].modules.reporting
    filter_enabled: clients[0].modules.filter
    templates_enabled: clients[0].modules.templates
    datatypes_enabled: clients[0].modules.datatypes

现在前三个模块完美运行。我在一周前对它们进行了编码,没有任何问题。但我现在正在添加数据类型模块,而且我遇到了一个非常奇怪的问题。

每当我尝试访问clients[0].datatypes属性时,它都会返回undefined,但当我console.log clients[0]时,它会显示所有属性及其值,包括数据类型。

console.log clients[0]的部分输出:

modules: 
 { datatypes: true,
   templates: true,
   filter: false,
   reporting: true },
reporting: 
 { email_interval: 2,
   name: '___',
   email: '___',
   send_email: true },
filter: {},
templates: { cms: { contacts: [Object] } },
datatypes: { cms: { contacts: [Object] } }

如您所见,所有属性都包括数据类型。其中我可以毫无问题地访问模块,报告,过滤器和模板属性(例如使用clients[0].modules),但是当我想访问数据类型属性clients[0].datatypes时,它将返回undefined

我已经三次检查我是否正在编写数据类型'正确地说,它不是一个与我混淆的异步功能。我把日志放在我实际想要使用.datatypes的行的前面,并且那时没有异步的东西,所以它不是。我尝试了其他一些东西,改变了加载顺序等,但没有任何作用。

console.log clients[0]
console.log clients[0].datatypes

第一行输出我的整个对象,包括datatypes属性。第二个一直在说undefined

我认为这可能与Node或Mongoose有关,或者它是Javascript怪癖中的一个,或者也许(同样可能)它只是我是一个白痴并弄乱了一些东西。我真的不知道,我现在一直在寻找解决方案大约两个小时,做了一百次谷歌搜索,挖掘了StackOverflow和其他网站,但我找不到回答我的问题而无法自己解决问题。这里有人知道可能导致这个问题的原因吗?

1 个答案:

答案 0 :(得分:1)

对于遇到此问题的其他人,我的解决方法是在Mongoose结果上调用.toObject()client[0] = client[0].toObject()。这会将Mongoose对象转换为常规对象。

对我来说,如果没有这个可以解决所有其他属性的原因仍然有点神秘,但是那个属性不会。但.toObject()为我解决了这个问题。