问题描述
我正在使用 Joi 来验证用于创建分页元数据的函数的参数。该函数接收以下参数 totalItemsNum
、skip
和 limit
。我正在尝试实现以下场景:
1 - 当 totalItemsNum
等于 0 时,Joi 应将 skip
参数的值设置为零,而不考虑原始值。
2 - 当 totalItemsNum
不为零时,Joi 不应让 skip
参数等于或大于 totalItemsNum
。因此,如果 skip
等于或大于 totalItemsNum
,Joi 应将 skip
参数的值设置为 totalItemsNum
- 1。
我设法使用以下代码实现了这一点:
const validator = Joi.object({
totalItemsNum: Joi
.number()
.min(0)
.required(),skip: Joi
.number()
.when('totalItemsNum',[
{
is: 0,then: Joi
.number()
.optional()
.empty(Joi.number())
.default(0)
},{
is: Joi.number().equal(Joi.ref('skip')),then: Joi
.number()
.optional()
.empty(Joi.number())
.default((parent) => parent.totalItemsNum - 1)
},{
is: Joi.number().less(Joi.ref('skip')),]).required(),limit: Joi
.number()
.default(10)
})
不过,我的印象是这段代码可以简化。例如,我总是将 skip
设置为可选,然后将任何数字值设置为使用 empty(Joi.number())
识别为空值,最后使用 default()
强制该值我愿意。
-
有没有办法使用 Joi 重新分配值而不是使用 Joi.default()?
-
如果
skip
大于或等于totalItemsNum
,有没有办法检入同一个对象?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)