我有一个模块导出了一个配置对象:
module.exports = {
music : {
catalog : {
mysql : {
requiredFields : {
foo : [1,2,3],
trackQuery : [
{
table : 'tracks',
alias : 't',
foo : [1,2,3],
fields : [
'id',
'name',
'duration'
]
},
{
table : 'artists',
alias : 'a',
fields : [
'id',
'name'
]
}
]
}
}
}
}
}
在运行时,fields
数组会变成空对象。
我是这样确认的:
var conf = require('musicConfig');
console.log ("requiredFields = %j", conf.music.catalog.mysql.requiredFields);
...输出结果如下:
requiredFields = ["foo":[1,2,3],"trackQuery":[{"table":"tracks","alias":"t","foo":{},"fields":{}},{"table":"artists","alias":"a","fields":{}}]]
正如您所看到的:
conf.music.catalog.mysql.requiredFields.foo // [1,2,3]
conf.music.catalog.mysql.requiredFields.trackQuery[0].foo // {} <-- WTF
conf.music.catalog.mysql.requiredFields.trackQuery[0].table // "tracks"
有什么想法吗?是的,我可以将
fields
数组移到更高级别的命名空间中,它可以工作-实际上要向上一步。如果我直接把它放在 requiredFields
下面,它将保持填充状态,但这不是一个理想的解决方案。我在这里确认了它不是ECMAScript bug和我的对象结构问题,因为它按预期工作。
我正在Ubuntu上运行Node 0.10.3 及其依赖项:
"dependencies" : {
"express" : "3.1.0",
"redis" : "0.8.2",
"jade" : "0.28.2",
"mysql" : "2.0.0-alpha7",
"mongodb" : "*",
"config" : "0.4.22"
}
我认为可能是 config module 引起的问题,但即使我绕过它,问题仍然存在。
更新:这里是输出:
console.log(util.inspect(config.music.catalog.mysql.requiredFields.trackQuery[0], { showHidden: true, depth: null }));
—— 虽然并不能提供太多帮助。我正在研究更有用的标志,欢迎建议。{ table: [Getter/Setter],
alias: [Getter/Setter],
foo: [Getter/Setter],
fields: [Getter/Setter],
[__watchers]:
{ table:
[ { [Function]
[length]: 0,
[name]: '',
[arguments]: null,
[caller]: null,
[prototype]: { [constructor]: [Circular] } },
[length]: 1 ],
alias:
[ { [Function]
[length]: 0,
[name]: '',
[arguments]: null,
[caller]: null,
[prototype]: { [constructor]: [Circular] } },
[length]: 1 ],
foo:
[ { [Function]
[length]: 0,
[name]: '',
[arguments]: null,
[caller]: null,
[prototype]: { [constructor]: [Circular] } },
[length]: 1 ],
fields:
[ { [Function]
[length]: 0,
[name]: '',
[arguments]: null,
[caller]: null,
[prototype]: { [constructor]: [Circular] } },
[length]: 1 ] },
[__propertyValues]:
{ table: [ 'tracks', [length]: 1 ],
alias: [ 't', [length]: 1 ],
foo: [ { [__watchers]: {}, [__propertyValues]: {} }, [length]: 1 ],
fields: [ { [__watchers]: {}, [__propertyValues]: {} }, [length]: 1 ] } }
...foo[1]
吗?这是你实际的数据还是在发布前进行了任何更改? - user11069252
,所以正如我在之前的几个评论中建议的那样,这可能是一个显示问题。要查看完整深度的数据,请使用util.inspect()
:console.log(util.inspect(conf.music.catalog.mysql.requiredFields, {depth: null}));
- user1106925fields.length === 0
异常,当我尝试引用fields[0]
时,它是undefined
。 - Maverickfoo
来排除名称fields
是罪魁祸首的可能性。在更高的命名空间级别上,任何一个数组都可以使用。 - Maverick