Joi:函数参数的自动验证

编程入门 行业动态 更新时间:2024-10-10 00:22:07

Joi:<a href=https://www.elefans.com/category/jswz/34/1771370.html style=函数参数的自动验证"/>

Joi:函数参数的自动验证

[我看到一个代码库正在使用joi库,如下所示:

function f(a, b) {
  // ...
}

f.schema = {
  a: Joi.string().uuid().required(),
  b: Joi.number()
}

然后f.schema属性未在其他任何地方引用。是否有一些框架可以使用schema属性执行功能参数的自动验证?谷歌搜索并没有带来任何好处。

回答如下:

[我不认为有可能完全按照您在此处显示的内容进行操作,因为Javascript中是overloading of function call is impossible,但是有一种方法可以使用Proxies进行类似的操作。

这是我设法做到的。我们创建一个validated代理对象,该对象将覆盖apply行为,该行为对应于标准函数调用以及applycall方法。

代理检查函数上是否存在schema属性,然后使用schema数组的元素验证每个参数。

const Joi = require('joi');

const validated = function(f) {
    return new Proxy(f, {
        apply: function(target, thisArg, arguments) {
            if (target.schema) {
                for (let i = 0; i < target.length; i++) {
                    const res = target.schema[i].validate(arguments[i]);
                    if (res.error) {
                        throw res.error;
                    }
                }
            }
            target.apply(thisArg, arguments)
        }
    })
}

const myFunc = validated((a, b) => {
    console.log(a, b)
});

myFunc.schema = [
    Joi.string().required(),
    Joi.number(),
];

myFunc('a', 2);

更多推荐

Joi:函数参数的自动验证

本文发布于:2024-05-07 20:48:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1757186.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   参数   Joi

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!