在 HapiJS Confidence 配置对象中设置过滤对象的默认值
Setting default value of filtered object in HapiJS Confidence configuration object
我在我的项目中使用 Confidence 库(在 HapiJS 套件中)进行配置管理(这个配置文件专门用于 WinstonJS 传输),我想知道是否可以设置一个筛选对象中单个项目的默认值。我不确定我的解释是否正确,我不确定正确的术语是什么,所以这里有一个例子:
我目前有一部分配置设置如下:
module.exports = {
$filter: 'env',
development: {
level: {
console: 'debug',
file: 'debug'
},
path: 'app-core.log'
},
staging: {
level: {
console: 'warn',
file: 'warn'
},
path: 'app-core.log'
},
production: {
level: {
console: 'error',
file: 'error'
},
path: 'prod-app-core.log'
}
}
但是由于 path
对于所有 env
项目应该是相同的,除了 production
,我希望我可以设置默认值path
值。像这样:
module.exports = {
$filter: 'env',
development: {
level: {
console: 'debug',
file: 'debug'
}
},
staging: {
level: {
console: 'warn',
file: 'warn'
}
},
production: {
level: {
console: 'error',
file: 'error'
},
path: 'prod-app-core.log'
},
$default: {
path: 'app-core.log'
}
}
显然,这行不通,但我希望它能说明我正在努力实现的目标。我找不到为对象中的单个配置项设置默认值的方法,如果我应用过滤器(比如 staging
),那么它会占用整个暂存对象,甚至不查看 $default
对象。
谢谢!
P.S. 虽然我想知道这是否可以通过置信度(用于其他目的)实现,但如果事实证明这是不可能的,那么有没有办法设置 WinstonJS 文件传输的默认路径?
我想你在找 $base
。请参阅文档中的 shared values 部分:
If you have values that you would like to share between various configuration objects without duplicating them for each option, you can create a $base
object.
以下是它在您的示例中的用法:
const Confidence = require('confidence');
const document = {
$filter: 'env',
$base: {
path: 'app-core.log'
},
development: {
level: {
console: 'debug',
file: 'debug'
}
},
staging: {
level: {
console: 'warn',
file: 'warn'
}
},
production: {
level: {
console: 'error',
file: 'error'
},
path: 'prod-app-core.log'
}
};
const store = new Confidence.Store(document);
console.log(store.get('/', { env: 'production' }));
console.log(store.get('/', { env: 'development' }));
控制台输出:
{ path: 'prod-app-core.log',
level: { console: 'error', file: 'error' } }
{ path: 'app-core.log',
level: { console: 'debug', file: 'debug' } }
那么 $default
是什么?
$default
用于定义一个对象,当 env 值在文档中没有相应的键时应该使用该对象。如果没有 $default
,您只会得到该路径的 undefined
:
const document = {
$filter: 'env',
$base: {
path: 'app-core.log'
},
$default: {
level: {
console: 'something-else',
file: 'something-else'
}
},
development: {
level: {
console: 'debug',
file: 'debug'
}
},
staging: {
level: {
console: 'warn',
file: 'warn'
}
},
production: {
level: {
console: 'error',
file: 'error'
},
path: 'prod-app-core.log'
}
};
const store = new Confidence.Store(document);
console.log(store.get('/', { env: 'dunno' }));
控制台输出:
{ path: 'app-core.log',
level: { console: 'something-else', file: 'something-else' } }
在 $default
级别定义的任何内容或特定的匹配过滤器值将优先于在 $base
定义的值。
我在我的项目中使用 Confidence 库(在 HapiJS 套件中)进行配置管理(这个配置文件专门用于 WinstonJS 传输),我想知道是否可以设置一个筛选对象中单个项目的默认值。我不确定我的解释是否正确,我不确定正确的术语是什么,所以这里有一个例子:
我目前有一部分配置设置如下:
module.exports = {
$filter: 'env',
development: {
level: {
console: 'debug',
file: 'debug'
},
path: 'app-core.log'
},
staging: {
level: {
console: 'warn',
file: 'warn'
},
path: 'app-core.log'
},
production: {
level: {
console: 'error',
file: 'error'
},
path: 'prod-app-core.log'
}
}
但是由于 path
对于所有 env
项目应该是相同的,除了 production
,我希望我可以设置默认值path
值。像这样:
module.exports = {
$filter: 'env',
development: {
level: {
console: 'debug',
file: 'debug'
}
},
staging: {
level: {
console: 'warn',
file: 'warn'
}
},
production: {
level: {
console: 'error',
file: 'error'
},
path: 'prod-app-core.log'
},
$default: {
path: 'app-core.log'
}
}
显然,这行不通,但我希望它能说明我正在努力实现的目标。我找不到为对象中的单个配置项设置默认值的方法,如果我应用过滤器(比如 staging
),那么它会占用整个暂存对象,甚至不查看 $default
对象。
谢谢!
P.S. 虽然我想知道这是否可以通过置信度(用于其他目的)实现,但如果事实证明这是不可能的,那么有没有办法设置 WinstonJS 文件传输的默认路径?
我想你在找 $base
。请参阅文档中的 shared values 部分:
If you have values that you would like to share between various configuration objects without duplicating them for each option, you can create a
$base
object.
以下是它在您的示例中的用法:
const Confidence = require('confidence');
const document = {
$filter: 'env',
$base: {
path: 'app-core.log'
},
development: {
level: {
console: 'debug',
file: 'debug'
}
},
staging: {
level: {
console: 'warn',
file: 'warn'
}
},
production: {
level: {
console: 'error',
file: 'error'
},
path: 'prod-app-core.log'
}
};
const store = new Confidence.Store(document);
console.log(store.get('/', { env: 'production' }));
console.log(store.get('/', { env: 'development' }));
控制台输出:
{ path: 'prod-app-core.log',
level: { console: 'error', file: 'error' } }
{ path: 'app-core.log',
level: { console: 'debug', file: 'debug' } }
那么 $default
是什么?
$default
用于定义一个对象,当 env 值在文档中没有相应的键时应该使用该对象。如果没有 $default
,您只会得到该路径的 undefined
:
const document = {
$filter: 'env',
$base: {
path: 'app-core.log'
},
$default: {
level: {
console: 'something-else',
file: 'something-else'
}
},
development: {
level: {
console: 'debug',
file: 'debug'
}
},
staging: {
level: {
console: 'warn',
file: 'warn'
}
},
production: {
level: {
console: 'error',
file: 'error'
},
path: 'prod-app-core.log'
}
};
const store = new Confidence.Store(document);
console.log(store.get('/', { env: 'dunno' }));
控制台输出:
{ path: 'app-core.log',
level: { console: 'something-else', file: 'something-else' } }
在 $default
级别定义的任何内容或特定的匹配过滤器值将优先于在 $base
定义的值。