mongoose 验证和使用 express-validator 有什么区别

What is the difference between mongoose validation and using express-validator

根据我自己的知识,您可以在 mongoose 模式中进行几乎所有可以使用 express-validator 进行的验证。所以我可以只使用 mongoose 或者即使我只创建新文档也需要使用 express-validator

事实上,您几乎可以像使用 express-validator 一样在 mongoose 模式中进行所有验证。 Mongoose 现在也支持对 update 的验证,所以你可以开始了。

让我指出两个案例:

  • 如果验证逻辑简单,小,就没有问题 关于猫鼬验证。但是在复杂的验证规则的情况下 和多个字段,那么 express-validator 可能是更好的选择。

    如果 mongoose built-in 验证器不足以满足您的需求 验证逻辑,您必须创建 custom validators。你会 必须添加更多的代码行,结果太大了 猫鼬模型文件。

    就我而言,我想要模型 js 文件作为 尽可能干净。 Express-validator,它是一个包装器 validator.js 提供验证器(例如 isAlphanumeric、isEmail 和 多得多),这可以使您免于编写大量代码。因此你 将您的验证逻辑保存在单独的文件中,并拥有您的代码 更整洁有序。

  • 另外一点是关于代码执行流程.
    Express-validator 是一个验证中间件。当您通过 post 请求发送表单时,您可以 运行 验证逻辑,如果出现任何错误,您可以 return 向客户端发送错误消息,而无需到达控制器或服务代码。

    同样,在我看来,运行 控制器或其他服务代码(取决于您的体系结构)的数据从客户端发送而未经验证或清理是一种不好的做法。使用 Express-validator,当代码执行流到达控制器逻辑时,这意味着您将要插入数据库的数据会得到很好的检查和清理。

    在不使用任何验证中间件的情况下,您必须 运行 所有控制器逻辑,并等待可能的验证错误,仅当流到达 mongoose 保存或更新方法时。想象一下,您的控制器包含十几个服务功能。为什么运行所有这些逻辑如果要取消它 由于数据无效?

总之,这两种方法都可以满足您的验证规则。在我看来,使用 Express-validator 可以获得更清晰、更有条理的代码,以及更好、更安全的代码执行流程。