最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

使用链验证通过Express Validator检查是否存在可选字段

运维笔记admin11浏览0评论

使用链验证通过Express Validator检查是否存在可选字段

使用链验证通过Express Validator检查是否存在可选字段

我正在尝试检查API请求中是否存在可选字段,如果该字段存在,请执行嵌套验证以检查其中是否存在其他两个字段(一个或另一个,或两个都隐式存在)。我正在使用Express Validator尝试完成此任务。

// Sample request body
{
  <...>
  thresholds: {
    min: 3,
    max: 5
  }
}

// (Attempted) validation chain
check('thresholds').optional()
      .custom( innerBody => {
          console.log('THRESHOLDS', innerBody);
          oneOf([
              check('innerBody.min').optional(),
              check('innerBody.max').optional()
          ]);
      })

以上代码段是我正在验证完整请求正文的较大验证链的一部分。我还尝试从内部innerBody.中删除check字符串,但仍然没有运气。我正在console.log设置阈值主体,并且可以正确打印出来,但是当我试图通过集成测试时,仍然出现验证错误:

{"name":"ValidationError","message":"ValidationError: Validation failed","errors":[{"location":"body","param":"thresholds","value":{"min":3,"max":5},"msg":"Invalid value"}]}

我对Express Validator还是比较陌生,所以如果我错误地链接验证/不正确使用oneOf或某些东西会喜欢某些指针!

谢谢

回答如下:

看上去.custom函数需要返回Promise。答案如下:

.custom(innerBody => {
            if (!(innerBody.min) || !(innerBody.max)) return Promise.reject('Missing min or max');
            return Promise.resolve();
        })
发布评论

评论列表(0)

  1. 暂无评论