繁体   English   中英

express-validator body 条件验证(参数)

[英]express-validator body conditional validation (param)

我有一条快速路线,我想将它用于三种不同的情况。 逻辑是一样的,只是做了一些小的修改,所以我不想创建单独的端点。 我使用参数“ type ”来区分情况。

问题是我只想在参数类型等于“ twoemails ”时使用第二个验证器,但我不知道该怎么做。 我尝试使用 oneOf 和 anyOf 但它似乎不起作用。 谢谢!

myRoute.post('/myendpoint/:type',
  param('type', 'Invalid type').isIn(['oneemail', '**twoemails**']),
  body('email1', 'first email invalid').isEmail(),
  body('email2', 'second email invalid').isEmail(),
  async (req, res) => {
      const errors = validationResult(req);

      if (!errors.isEmpty()) {
        return res.status(400).json({
          errors: errors.array(),

        });
      }
...

您可以将body('email2', 'second email invalid').isEmail()替换为:

body('email2')
  .if(param('type').equals('twoemails'))
  .isEmail()
  .withMessage('second email invalid')

如果类型设置为两个电子邮件,它只会验证第二个 email。 这取决于您的参数行是这样的,没有 *s。

param('type', 'Invalid type').isIn(['oneemail', 'twoemails'])

所以整个解决方案

myRoute.post('/myendpoint/:type',
  param('type', 'Invalid type').isIn(['oneemail', 'twoemails']),
  body('email1', 'first email invalid').isEmail(),
  body('email2')
    .if(param('type').equals('twoemails'))
    .isEmail()
    .withMessage('second email invalid'),
  async (req, res) => {
      const errors = validationResult(req);

      if (!errors.isEmpty()) {
        return res.status(400).json({
          errors: errors.array(),

        });
      }
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM