【问题标题】:What is the difference between mongoose validation and using express-validatormongoose 验证和使用 express-validator 有什么区别
【发布时间】:2020-05-10 19:03:23
【问题描述】:

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

【问题讨论】:

    标签: mongoose express-validator


    【解决方案1】:

    确实,您几乎可以在 mongoose 模式中进行所有验证,就像使用 express-validator 一样。 Mongoose 现在也支持在 update 上进行验证,所以你很高兴。

    让我指出两种情况:

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

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

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

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

      再次,在我看来,运行控制器或其他服务代码(取决于您的架构)是一种不好的做法,数据从客户端发送而没有经过验证或清理。使用 Express-validator,当代码执行流程到达控制器逻辑时,这意味着您要插入数据库的数据已经过检查和清理。

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

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

    【讨论】:

    • 感谢您的干净回答
    猜你喜欢
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 2015-10-23
    相关资源
    最近更新 更多