我在我的项目中使用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
设置默认值{1}}价值。像这样:
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
),那么它会占用整个临时对象,甚至不会查看{{ 1}}对象。
谢谢!
PS 虽然我想知道这是否可以通过置信度(用于其他目的),如果事实证明这是不可能的,那么有没有办法设置默认路径对于WinstonJS文件传输?
答案 0 :(得分:4)
我认为你正在寻找 private static JasperDesign getPageTemplateDesign(String templatePath) throws JRException{
logger.info("Setting format page desing for Template: " + templatePath);
JasperDesign design = JRXmlLoader.load(templatePath);
logger.info("Setting Page Dimessions Format to: " + pageFormat);
if (JRDriver.pageFormat.equals("A4")) {
JRDriver.pageWidth=595;
JRDriver.pageHeight=842;
JRDriver.columnCount=1;
JRDriver.columnWidth=555;
JRDriver.columnSpacing=0;
JRDriver.leftMargin=20;
JRDriver.rightMargin=20;
JRDriver.topMargin=20;
JRDriver.bottomMargin=20;
}
else if (JRDriver.pageFormat.equals("LETTER")) {
JRDriver.pageWidth=612;
JRDriver.pageHeight=792;
JRDriver.columnCount=1;
JRDriver.columnWidth=517;
JRDriver.columnSpacing=0;
JRDriver.leftMargin=20;
JRDriver.rightMargin=20;
JRDriver.topMargin=20;
JRDriver.bottomMargin=20;
}
//Setting twmplate dimesions
design.setPageWidth(JRDriver.pageWidth);
design.setPageHeight(JRDriver.pageHeight);
design.setColumnCount(JRDriver.columnCount);
design.setColumnWidth(JRDriver.columnWidth);
design.setColumnSpacing(JRDriver.columnSpacing);
design.setLeftMargin(JRDriver.leftMargin);
design.setRightMargin(JRDriver.rightMargin);
design.setTopMargin(JRDriver.topMargin);
design.setBottomMargin(JRDriver.bottomMargin);
return design;
}
private static void reformattingPageTemplate(String path) throws JRException{
logger.info("Getting Design Template from: " + path);
JasperDesign design= getPageTemplateDesign(path);
String destFile=path.replaceAll("jrxml", "jasper");
logger.info("Compiling Re-formated Design Template to: " + destFile);
JasperCompileManager.compileReportToFile(design, destFile);
}
private static void formattingALLPage() throws JRException{
reformattingPageTemplate(reportBookPagesDir + "/FrontCover.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/Copyright.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/TableOfContent.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/Summary.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/Content.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/AppendixWarnings.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/Index.jrxml");
reformattingPageTemplate(reportBookPagesDir + "/BackCover.jrxml");
//reformattingPageTemplate(reportTemplatePath);
}
。请参阅文档中的shared values部分:
如果您希望在各种配置对象之间共享值而不为每个选项复制它们,则可以创建
$base
对象。
以下是它与您的示例一起使用的方式:
$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
用于定义当env值在文档中没有对应键时应使用的对象。如果没有$default
,您只需获得$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
定义的值。