我需要将 @hapi/joi 与猫鼬一起使用吗?

Do I need to use @hapi/joi with mongoose?

我需要使用 @hapi/joi with mongoose 吗?

据我了解,@hapi/joi 用于验证 HTTP 请求(headers、参数、body 等)。 @hapi/joi 提供自己的模式验证。 mongoose 还提供了它自己的模式验证,但在另一个层面上。如果 hapi/joi 尝试验证 HTTP 请求,那么 mongoose 模式验证可确保数据有效以插入数据库。

如您所见,这两个库都提供了自己的模式验证(在不同级别)。它需要额外的资源来保持两个模式彼此相等(这是错误的地方)。

问题是:我是否需要保留这两个库并支持两个模式?或者我可以使用 mongoose 和他们的验证并且 @hapi/joi 是冗余的?

提前致谢!

更新:

我找到了 related question,但它并没有回答我的问题:(

您不必使用像 Joi 这样的模式验证包。

不过两者都用就好了。他们互相称赞。

Joi 用于APIs 以确保客户端发送的数据有效。 猫鼬模式用于确保我们的数据处于正确的状态。

使用 Joi API 验证有意义的场景:

我们通常对用户密码进行哈希处理,因此在我们的用户模式中,密码的 maxlength 选项可以比实际密码长度大得多。因此,对于 Joi,我们可以验证密码字段,使其在登录路径中不能超过 10 个字符。

猫鼬模式验证有意义的场景:

假设客户端发送了一个有效数据,有可能我们在创建文档时忘记设置了属性。如果我们在该字段的 mongoose 模式中没有 required: true 选项,则创建的文档将没有该字段。

在访问数据库之前尽快验证客户端数据对安全性和性能也有好处。

同时使用两者的唯一缺点是一些验证重复。但他们似乎创建了一个名为 joigoose 的包来从 Joi 模式创建猫鼬模式。