问题描述
目前,我有一个带有一些逻辑的自定义验证器,但我正在其他验证器上重复该逻辑,我想知道是否有办法创建自定义方法来避免重复类似的代码。
这是我在一些验证器中所拥有的:
const exampleValidator = [
body().custom((value) => {
allowed = ['param1','param2','param3',...];
/**
bunch of logic to allow certain fields...
*/
}),body('parameter','invalid parameter provided').isEmpty()
];
注意:此自定义验证器的构建仅允许在请求中发送某些字段。给定一个数组,自定义验证器检查发送的 请求只包含允许的字段。
我想要的:我想知道是否有一种方法可以创建自定义验证器来获得这样的东西:
const exampleValidator = [
body().allowCertainFields(['field1','field2']),'invalid parameter provided').isEmpty()
];
如果有办法,我不知道在哪里可以创建这个allowCertainFields()
自定义方法而无需修改 express-validator 的任何核心文件。
因为另一种方法是做这样的事情:
const exampleValidator = [
body().custom((value) => {
allowed = ['param1','param2'];
return allowCertainFields(value,allowed);
}),'invalid parameter provided').isEmpty()
];
但首先我想知道我想做的事情是否可行。
解决方法
您可以在任何地方创建验证器函数,甚至在其他模块中,并将它们导入到位,并将它们作为参数传递给 body().custom()
。
类似于:
const create = (allowed) => {
return (value) => {
/**
bunch of logic to allow certain fields...
*/
return true;
}
}
const allowCertainFields = create(['field1','field2']);
const exampleValidator = [
body().custom(allowCertainFields),body('parameter','invalid parameter provided').isEmpty()
];