Node.js 快速验证程序-如何处理条件验证

Node.js 快速验证程序-如何处理条件验证,node.js,express,express-validator,validator.js,Node.js,Express,Express Validator,Validator.js,我有一个表格,如果一个人的送货地址与他们的账单地址不同,他们会选择一个单选按钮说“否” 我需要能够检查它的价值是什么,如果是“否”,则检查展开的形式。如果是“是”,我将跳到下面的下一个验证。“yes”部分正在工作,但“no”部分总是返回invalidated。有没有办法用这个库在这样的条件中嵌套验证 以下是表单的屏幕截图: 以下是我对该场景的验证代码: router.post('/testData2/', [ body('billingSameAsShipping', "P

我有一个表格,如果一个人的送货地址与他们的账单地址不同,他们会选择一个单选按钮说“否”

我需要能够检查它的价值是什么,如果是“否”,则检查展开的形式。如果是“是”,我将跳到下面的下一个验证。“yes”部分正在工作,但“no”部分总是返回invalidated。有没有办法用这个库在这样的条件中嵌套验证

以下是表单的屏幕截图:

以下是我对该场景的验证代码:

    router.post('/testData2/', [
      body('billingSameAsShipping', "Please Fill All Fields Of Your Billing Address").custom((value) => {
        if (value === 'no') {
          [
            body('billingFirstName', "Please Enter Your First Name").isLength({
              min: 1
            }),
            body('billingLastName', "Please Enter Your Last Name").isLength({
              min: 1
            }),
            body('billingAddress1', "Please Enter Your Billing Address").isLength({
              min: 1
            }),
            body('billingZip', "Please Enter Your Billing ZipCode").isLength({
              min: 1
            }),
            body('billingCity', "Please Enter Your Billing City").isLength({
              min: 1
            }),
            body('billingState', "Please Enter Your Billing State").isLength({
              min: 1
            })
          ]
        } else {

          return Promise.resolve();
        }

      }),
    body('creditCardNumber', 'Please Enter A Vaild Credit Card Number').isCreditCard(),
    body('expmonth', 'Exp Month Empty').isLength({
      min: 1
    }),
    body('expyear', 'Exp Year Empty').isLength({
      min: 1
    }),
    body('CVV', 'CVV Empty').isLength({
      min: 3
    })
  ],
  (req, res) => {...
这是我们要检查的请求对象

{
  billingSameAsShipping: 'no',
  billingFirstName: 'First',
  billingLastName: 'Last',
  billingAddress1: '450 Test Ave',
  billingZip: '12345',
  billingCity: 'San Diego',
  billingState: 'CA',
}

我明白了,Express Validator内置了一个条件检查

我使用([])中的一个来检查单选按钮的值是否为“是”检查账单地址字段是否已填写

router.post('/testData2/', [
    oneOf([
      [
        body('billingFirstName', "Please Enter Your First Name").isLength({
          min: 1
        }),
        body('billingLastName', "Please Enter Your Last Name").isLength({
          min: 1
        }),
        body('billingAddress1', "Please Enter Your Billing Address").isLength({
          min: 1
        }),
        body('billingZip', "Please Enter Your Billing ZipCode").isLength({
          min: 1
        }),
        body('billingCity', "Please Enter Your Billing City").isLength({
          min: 1
        }),
        body('billingState', "Please Enter Your Billing State").isLength({
          min: 1
        })
      ],
      body('billingSameAsShipping').equals('yes')
    ], "Please Fill Out All Fields Of Your Billing Address"),
    body('creditCardNumber', 'Please Enter A Vaild Credit Card Number').isCreditCard(),
    body('expmonth', 'Exp Month Empty').isLength({
      min: 1
    }),
    body('expyear', 'Exp Year Empty').isLength({
      min: 1
    }),
    body('CVV', 'CVV Empty').isLength({
      min: 3
    })
  ],
  (req, res) => {...
现在看来这是正确的

有人对这个问题有其他的解决方案,或者看到我上面的解决方案有什么问题吗