在HapiJS置信度configuration对象中设置过滤对象的默认值

我在我的项目中使用Confidence库(在HapiJS套件中)进行configurationpipe理(这个configuration文件专门用于WinstonJS传输),而且我想知道是否可以在一个filter中设置单个项目的默认值目的。 我不确定我是否解释了这个问题,我不确定正确的术语是什么,所以inheritance了一个例子:

我目前有一部分configuration设置:

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都应该是相同的,除了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' } } 

显然,这是行不通的,但我希望它能说明我正在努力完成的事情。 我无法find一种方法来设置对象中的单个configuration项的默认值,如果我应用filter(如staging ),然后它采取整个登台对象,甚至没有看$default对象。

谢谢!

PS虽然我想知道这是否可以通过置信(用于其他目的),如果事实certificate这是不可能的,那么有没有办法设置WinstonJS文件传输的默认path?

我想你正在寻找$base 。 请参阅文档中的共享值部分:

如果您有想要在各种configuration对象之间共享的值,而不是为每个选项重复这些值,则可以创build一个$base对象。

以下是如何使用它的例子:

 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该path:

 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级别定义的或者特定的匹配filter值将优先于$base定义的值。