作者:圣换少爷 | 来源:互联网 | 2022-12-10 14:16
我有一个具有键/值对的文件.此文件在process.env
via Docker中加载.但是出于开发目的,我手动加载它,所以最后它们是相同的;
配置:
process.env['ccc.logger.winston.level']='info';
process.env['ccc.logger.winston.transports.type.file']='File';
process.env['ccc.logger.winston.transports.filename']='logs/testOne.log';
process.env['ccc.logger.winston.transports.rotate']='false';
process.env['ccc.logger.winston.transports.type.file']='File';
process.env['ccc.logger.winston.transports.filename']='logs/testTwo.log';
process.env['ccc.logger.winston.transports.rotate']='true';
我的期望是拥有这个目标:
{
"ccc": {
"logger": {
"winston": {
"level": "info",
"transports": [
{
"type": "File",
"filename": "logs/testONE.log",
"rotate": true
},
{
"type": "File",
"filename": "logs/testTWO.log",
"rotate": false
}
]
}
}
}
}
我已经提出了可行的解决方案,但如果我有一个对象数组,我遇到了问题,就像上面的例子一样:
循环所有键/值的函数和调用函数来创建对象:
let ENV_FROM_DOCKER = process.env;
for (let property in ENV_FROM_DOCKER) {
let checkForShallowProperties = property.split(".")[1];
if (typeof checkForShallowProperties === 'undefined') {
continue;
}
let resultObject = this.expand(property, ENV_FROM_DOCKER[property]););
emptyCOnfig= merge(emptyConfig, resultObject);
let stop;
}
对象创建功能:
expand(str, value) {
let items = str.split(".") // split on dot notation
let output = {} // prepare an empty object, to fill later
let ref = output // keep a reference of the new object
// loop through all nodes, except the last one
for (let i = 0; i
这个设置工作正常,但如果我有一个对象数组的对象(如上面的例子),它不能正常工作.这是现在的输出:
{
"ccc": {
"logger": {
"winston": {
"level": "info",
"transports": {
"type": {
"file": "File"
},
"filename": "logs/testTwo.log",
"rotate": "true"
}
}
}
}
}
我试图让这段代码现在工作几个小时,但只是在圈子里旋转.该ccc
对象是一个例子.键/值列表中还有其他对象也可能包含数组.