我需要验证这个对象:
{a: 'valueA', b: 'valueB'}
Run Code Online (Sandbox Code Playgroud)
为了验证“a”,我需要检查他的值(valueA)是否存在于我的数据库中。如果该值不存在,则该对象无效,否则有效。如何使用 Joi 验证器创建自定义 async/await 来实现此目的?
您可以使用该方法添加外部验证any.external(),它接收一个函数作为参数,因此可用于检查数据库中的值。
接收到的函数的第一个参数是您设置要验证的对象的克隆。它在所有其他验证之后运行。如果模式验证失败,则不会调用外部验证规则。
const checkData = async (data) => {
const res = await db.find({ name: data.a }) // or any method you use
if (!res) {
throw new Error('Data not found in db!')
}
}
const schema = Joi.string().external(checkData)
await schema.validateAsync({ a: 'valueA', b: 'valueB' })
Run Code Online (Sandbox Code Playgroud)