Javascript NodeJS模块填充的数组变为空对象。为什么?
我有一个导出配置对象的模块:Javascript NodeJS模块填充的数组变为空对象。为什么?,javascript,arrays,node.js,object,Javascript,Arrays,Node.js,Object,我有一个导出配置对象的模块: module.exports = { music : { catalog : { mysql : { requiredFields : { foo : [1,2,3], trackQuery : [ { t
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'
]
}
]
}
}
}
}
}
字段
数组在运行时变为空对象
我这样确认:
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":{}}]]
…将输出此文件:
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"
我想可能是这样,但即使我绕过它,问题仍然存在
UPDATEHere是以下内容的输出: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 ] } }
当使用
config
模块读取文件时,我可以重现这些问题,因此我认为您没有正确绕过它
另外,当我在config/lib/config.js
中增加DEFAULT\u CLONE\u DEPTH
时(从外部看它似乎不可配置,但我不太熟悉),它可以工作:
> console.log(conf.music.catalog.mysql.requiredFields.trackQuery[0].foo)
[ [Getter/Setter], [Getter/Setter], [Getter/Setter] ]
您可以在node.jsp中要求()纯json文件您确定这不仅仅是一个显示错误吗?你真的试过索引吗,比如
…foo[1]
?这是您的实际数据吗,还是您在发布之前以任何方式对其进行了更改?…您说您可以将字段
移动到更高的命名空间,这样就可以了。。。但是您询问的是foo
…默认深度限制默认值是2
,因此正如我建议的那样,这可能是一个显示问题。要全面查看数据,请使用:console.log(util.inspect(conf.music.catalog.mysql.requiredFields,{depth:null}))代码>它标记了我的字段。长度===0
异常,当我尝试引用字段[0]
时,它是未定义的
,我通过require('./config/default.js')
绕过了它(所以我认为)
-更改克隆深度为我解决了这个问题。非常感谢。