【问题标题】:How to do conditional check express-validator 5.3.0?如何进行条件检查 express-validator 5.3.0?
【发布时间】:2018-12-10 07:27:28
【问题描述】:
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.0 更新到最新的 express-validator API 的人都很有用

【问题讨论】:

    标签: javascript node.js express express-validator


    【解决方案1】:

    在 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 到期时被删除(还没有!)。

    所有文档都是here,与较新的 API 文档并排。

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

    【讨论】:

    • 很高兴直接从 repo 维护者那里得到反馈,实际上我自己也看到了这个 pull request,但我想确定一下,因为我现在处于必须更新验证器的情况现在我使用了一个自定义验证器和一些嵌套的 if else 来重新创建早期的条件验证器,但我想知道是否有任何适当或优雅的方法来做到这一点
    • 距离发布还有多久
    • @codefreaK 没有设定截止日期。我每周最多有 2 小时的时间来处理我的 OSS 项目。不多。
    猜你喜欢
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多