5
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)));
    });
  };
}

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

在 if 循环中调用 req.checkBody 或所需的验证函数完成了如上所示的技巧,但在 API 更改后如何实现这一点我尝试了将 paymentTYPE 检查为自定义验证器并实现检查并抛出消息的解决方法在自定义验证器中,但键更改。

使用当前的 APi 执行此操作的正确方法是什么,因为这对于所有想要从 3.0.0s 更新到最新的 express-validator API 的人都很有用

4

1 回答 1

3

express-validator 中尚不提供条件验证支持v5.x.x,但即将推出
这是拉取请求,如果您想对 API 提供反馈: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 文档并排。

免责声明:我是 express-validator 维护者。

于 2018-12-09T23:27:28.083 回答