提问人:Amaarockz 提问时间:9/16/2023 更新时间:9/16/2023 访问量:64
Joi 根据空值或非空值验证字符串
Joi validate a string based on empty or non-empty values
问:
我对一个名为 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 ,如果不是,那么它应该失败并出现上述错误
AAA
BBB
可以对上述代码进行哪些更改,以便它按照我的要求工作。
提前致谢
答:
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
评论