node.js - 如何使用 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 中的任何 id 与 driverId 格式匹配。
要求:
{
"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"
]
}
}
EDIT1:如果我这样验证,它可以工作,但是当尝试使用Joi.ref('driverId')
inside时valid()
,它不起作用。
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(),
推荐阅读
- gcc - 在二进制文件中嵌入可访问文本 - 编译后
- javascript - 从搜索文本中派生关键字
- sql - SQL如何根据该集合的单个值是否等于某物来过滤出整个值集?
- android - 使用 MediaProjection API 截屏并只请求一次权限
- algorithm - 是否存在开放车间调度问题 (OSSP) 的并行变体
- java - 如何在java中定期检查文件夹是否存在
- python - 如何从嵌入在 Python 中的 PyQt5 小部件中的 youtube 视频中打开 youtube 链接?
- reactjs - 如何从子组件中两次更新父组件中的状态?
- sql - 提高 Postgre SQL 查询性能
- mongodb - 如何禁用 discord.js-commando 中的特定命令