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')
绕过了它(所以我认为)
-更改克隆深度为我解决了这个问题。非常感谢。