[英]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.