如何使用 Joi 验证数组是否包含另一个键值?
How to validade if an Array contains another key value using Joi?
我想验证 driverId 不能在 passengersId 中,所以我尝试了这个:
driverId: Joi
.string()
.min(24)
.max(24)
.alphanum()
.required(),
passengersId: Joi
.array()
.items(Joi.string().min(24).max(24).alphanum(), Joi.string().label('driverId').forbidden())
.min(1)
.required(),
但它不允许乘客 ID 中有任何符合 driverId 格式的 ID。
要求:
{
"date": "2020-05-06",
"driverId": "5eef835636187301529b312c",
"passengersId": ["5eef835636187301529b312c","5eef847088632e0178c2e85b"],
"destinyId": "5eed7c3b5149460a45b85091"
}
验证:
{
"statusCode": 400,
"error": "Bad Request",
"message": "\"passengersId[0]\" contains an excluded value. \"passengersId[1]\" contains an excluded value",
"validation": {
"source": "body",
"keys": [
"passengersId.0",
"passengersId.1"
]
}
}
编辑1:
如果我这样验证,它可以工作,但是当尝试在 valid()
中使用 Joi.ref('driverId')
时,它不起作用。
passengersId: Joi
.array()
.items(Joi.string().min(24).max(24).alphanum(), Joi.string().valid('5eef835636187301529b312c').forbidden())
.required(),
已解决:在密钥名称前使用 Joi.in
和“/”来引用前一个密钥。
我用来解决问题的来源:LINK
passengersId: Joi
.array()
.items(Joi.string().min(24).max(24).alphanum(), Joi.string().valid(Joi.in('/driverId')).forbidden())
.required(),
我想验证 driverId 不能在 passengersId 中,所以我尝试了这个:
driverId: Joi
.string()
.min(24)
.max(24)
.alphanum()
.required(),
passengersId: Joi
.array()
.items(Joi.string().min(24).max(24).alphanum(), Joi.string().label('driverId').forbidden())
.min(1)
.required(),
但它不允许乘客 ID 中有任何符合 driverId 格式的 ID。
要求:
{
"date": "2020-05-06",
"driverId": "5eef835636187301529b312c",
"passengersId": ["5eef835636187301529b312c","5eef847088632e0178c2e85b"],
"destinyId": "5eed7c3b5149460a45b85091"
}
验证:
{
"statusCode": 400,
"error": "Bad Request",
"message": "\"passengersId[0]\" contains an excluded value. \"passengersId[1]\" contains an excluded value",
"validation": {
"source": "body",
"keys": [
"passengersId.0",
"passengersId.1"
]
}
}
编辑1:
如果我这样验证,它可以工作,但是当尝试在 valid()
中使用 Joi.ref('driverId')
时,它不起作用。
passengersId: Joi
.array()
.items(Joi.string().min(24).max(24).alphanum(), Joi.string().valid('5eef835636187301529b312c').forbidden())
.required(),
已解决:在密钥名称前使用 Joi.in
和“/”来引用前一个密钥。
我用来解决问题的来源:LINK
passengersId: Joi
.array()
.items(Joi.string().min(24).max(24).alphanum(), Joi.string().valid(Joi.in('/driverId')).forbidden())
.required(),