【问题标题】:express-validator body conditional validation (param)express-validator body 条件验证(参数)
【发布时间】:2021-05-03 11:37:51
【问题描述】:

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

问题是我只想在参数 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(),

        });
      }
...

【问题讨论】:

    标签: javascript node.js express validation express-validator


    【解决方案1】:

    你可以用这个替换body('email2', 'second email invalid').isEmail()

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

    如果类型设置为两封电子邮件,它只会验证第二封电子邮件。这取决于你的参数行是这样的,没有 *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(),
    
            });
          }
    ...
    

    【讨论】:

    • 我会建议使用 .optional() 但这是一个更好的解决方案。
    猜你喜欢
    • 2014-08-05
    • 2019-03-07
    • 2013-07-11
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多