Joi 异步自定义验证

taz*_*32w 5 javascript joi

我需要验证这个对象:

{a: 'valueA', b: 'valueB'}
Run Code Online (Sandbox Code Playgroud)

为了验证“a”,我需要检查他的值(valueA)是否存在于我的数据库中。如果该值不存在,则该对象无效,否则有效。如何使用 Joi 验证器创建自定义 async/await 来实现此目的?

Tam*_*oke 1

您可以使用该方法添加外部验证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)

更多信息