如何进行条件检查 express-validator 5.3.0?

cod*_*eaK 5 javascript node.js express express-validator

export function valUPM() {
  return (req: Request, _res: Response, next: NextFunction) => {
    req
      .checkBody(
        "paymentType",
        `paymentType: ${messages.getFromSession(req, "mustNotBeEmpty")}`
      )
      .notEmpty();
    if (req.body.paymentType === "USP") {
      req
        .checkBody(
          "storeId",
          `storeId: ${messages.getFromSession(req, "mustNotBeEmpty")}`
        )
        .notEmpty();
    } else if (req.body.paymentType === "CC") {
      if (req.body.register) {
        req
          .checkBody(
            "register",
            `register: ${messages.getFromSession(req, "mustBeBoolean")}`
          )
          .isBoolean();
      } else {
        req
          .checkBody(
            "register",
            `register: ${messages.getFromSession(req, "mustNotBeEmpty")}`
          )
          .notEmpty();
      }
    }
    req.getValidationResult().then(errs => {
      if (errs.isEmpty()) {
        return next();
      }
      const error = new BFFError(
        400,
        "BadRequest",
        1,
        errs.array().map(error => {
          return { [error.param]: error.msg };
        })
      );
      return next(Error(JSON.stringify(error)));
    });
  };
}
Run Code Online (Sandbox Code Playgroud)

更改 API 后如何在快速验证器中实现此类逻辑

在 if 循环中调用 req.checkBody 或所需的验证函数执行了如上所示的技巧,但在 API 更改后如何实现这一点,我尝试了一种将 paymentTYpe 作为自定义验证器检查并实现检查并抛出消息的工作在自定义验证器中,但密钥发生了变化。

使用当前的 API 什么是正确的方法来做到这一点,因为这对所有想要从 3.0.0s 更新到最新的 express-validator API 的人都很有用

gus*_*nke 3

Express-validator 中尚不支持条件验证,但很快v5.x.x就会推出。 如果您想提供有关 API 的反馈,请参阅以下 Pull 请求: https: //github.com/express-validator/express-validator/pull/658

但是,请注意,遗留 API(使用req.checkBody()req.getValidationResult()等的 API 尚未从 express-validator 中删除。

可以v5.x.x像在 中一样继续使用它v3.x.x。只是不建议这样做,因为它已被弃用,并且可能会在 v6 到期时被删除(还没有!)。

所有文档都在这里,与较新的 API 文档并排。

免责声明:我是一名快速验证器维护者。