首页 > 解决方案 > 如何在带有 express-validator 的验证链中使用 bail()

问题描述

我想在它到达我的自定义验证器之前保释。

   public classification = () => [
        param("id").exists({ checkNull: true }).isMongoId().bail(),
        param("id")
            .custom(checkIfSessionExists)
            .custom(checkIfSessionIsCompletedOrFailed)
            .custom(checkIfSessionHasExpired)
            .custom(checkIfSessionContainsFrontImage),
        validationResultHandler,
    ]

为什么我不能.bail()在这里申请: param("id").exists({ checkNull: true }).isMongoId().bail(),

标签: node.jsexpress-validator

解决方案


根据 express-validator 文档:

.bail() 可用于防止接触数据库或外部 API 的自定义验证器在您知道它将失败时运行。如果需要,可以在同一验证链中多次使用。

在你的情况下,它会像:

[
  check('id')
   .exists({ checkNull: true }).bail()
   .isMongoId().bail()
   .custom(checkIfSessionExists).bail()
   .custom(checkIfSessionIsCompletedOrFailed).bail()
   .custom(checkIfSessionHasExpired).bail()
   .custom(checkIfSessionContainsFrontImage)
  ...
  ...
];

因此,如果某些验证失败,则以下验证器将永远不会运行


推荐阅读