如何创建新的可重用自定义验证器

问题描述

有没有办法创建一个验证器方法在不同的地方重用?

目前,我有一个带有一些逻辑的自定义验证器,但我正在其他验证器上重复该逻辑,我想知道是否有办法创建自定义方法来避免重复类似的代码

这是我在一些验证器中所拥有的:

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()
];