繁体   English   中英

如何通过代码生成 Joi 验证,基于 object 并使用 Nodejs 将其保存在文件中

[英]How to generate Joi validations via code, based on an object and save it in a file using Nodejs

我正在尝试通过基于 object 的代码生成 Joi 验证。 我想知道是否有办法以编程方式生成它们并将它们存储到文件中。 我尝试了以下方法:

假设我有一个 object 如下:

let obj = [{
  Key: 'key1',
  Type: 'string'  
}]

一个 function 生成一个 object 的 Joi 验证:

function getJoiObject(data) {
    const obj = {};
    Object.keys(data).forEach(key => {
        if (data[key].Type === "string")
            obj[data[key].Key] = Joi.string();
        else if (data[key].Type === "integer")
            obj[data[key].Key] = Joi.number();
        else if (data[key].Type === "boolean")
            obj[data[key].Key] = Joi.boolean();
    });
    return obj;
} 

我将 object 保存到一个文件中,并在另一个文件中使用它进行验证。

 fs.writeFileSync('validations.json', JSON.stringify({res:getJoiObject(obj)}));

问题是,当我将 validations.json 导入另一个文件并使用数据验证它时,它不起作用。

const a = {key1:'abc'};
Joi.object(validations.res).validate(a)

能否请你帮忙。

提前致谢。

Joi具有序列化和反序列化其模式的方法,但它们没有完整记录(从 v17.6 开始)。 我有一个类似的问题,发现这个 GitHub 问题为我回答了这个问题。

您可以做的是在将模式保存到文件之前调用模式上的describe()方法。 这会将它们序列化为更简单的形式。 然后,当从文件中读取序列化版本时,使用Joi.build()并传入序列化模式以将它们反序列化回Joi对象。 只需确保首先将字符串化的 JSON 解析回 object 即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM