Joi 根据空值或非空值验证字符串

Joi validate a string based on empty or non-empty values

提问人:Amaarockz 提问时间:9/16/2023 更新时间:9/16/2023 访问量:64

问:

我对一个名为 store_type 的字段进行了以下 Joi 验证

store_type: Joi.string().valid(...Object.values(storeTypes))
 .error(() => ({
    message: `Store Type must be one of: ${Object.values(storeTypes).join(', ')}`,
 })).default(storeTypes.aaa),

其中 storeTypes 定义为

storeTypes: {
 aaa: 'AAA',
 bbb: 'BBB'
}

根据上述验证,我期望的是

  • 当我不传递store_type值时,默认情况下,它应该将该值设置为AAA
  • 如果我传递一个空字符串或非空字符串,那么它应该检查这是 or ,如果不是,那么它应该失败并出现上述错误AAABBB

可以对上述代码进行哪些更改,以便它按照我的要求工作。

提前致谢

JavaScript 节点:.js 验证 猫鼬模式 JOI

评论


答:

1赞 cmgchess 9/16/2023 #1

error() must return an Error object

  • 我尝试了自己,并且不得不使用要添加的自定义错误消息修改错误消息。 您也可以在此处进行测试
    store_type: Joi.string()
      .valid(...Object.values(storeTypes))
      .error((err) => {
        err[0].message = `Store Type must be one of: ${Object.values(storeTypes).join(', ')}`
        return err
      })
      .default(storeTypes.aaa)

现在,您可以在验证时访问错误

const { error, value } = schema.validate(inputObject)
console.log(error.details[0].message)

  • 或者你可以返回一个对象Error
store_type: Joi.string()
      .valid(...Object.values(storeTypes))
      .error(() => new Error(`Store Type must be one of: ${Object.values(storeTypes).join(', ')}`))
      .default(storeTypes.aaa)

并访问错误,例如

const { error, value } = schema.validate(inputObject)
console.log(error.message)
0赞 Amaarockz 9/16/2023 #2

谢谢你的回答@cmgchess 实际上,下面的片段对我有用

store_type: Joi.string().allow('').valid(...Object.values(storeTypes))
          .default(storeTypes.aaa)
          .error(() => ({
            message: `Store Type must be one of: ${Object.values(storeTypes).join(', ')}`,
          }))

评论

0赞 cmgchess 9/16/2023
嗯,出于某种原因,它给我带来了错误。也许我错过了什么error() must return an Error object