Node.js 在Mongoose模式旁边使用Joi模式?

Node.js 在Mongoose模式旁边使用Joi模式?,node.js,mongodb,mongoose,schema,joi,Node.js,Mongodb,Mongoose,Schema,Joi,我想阻止将用户输入插入MongoDB。 我想正确验证用户输入 为了测试用户输入,Joi提供了基于模式的验证。 实际上听起来不错 猫鼬本身也有模式,有什么区别 使用Joi模式并使用plugin而不是Mongoose如何?Mongoose和Joi模式之间的区别 猫鼬的模式:这是定义模型及其将接受的字段的地方 例如 这里你是说用户模型只接受用户名和电子邮件,两者都是字符串 Joi的模式:在这里,您定义了验证规则,以在创建文档之前验证接收到的数据 例如 这就是使用Joi模式定义规则的方式 usern

我想阻止将用户输入插入MongoDB。 我想正确验证用户输入

为了测试用户输入,Joi提供了基于模式的验证。 实际上听起来不错

猫鼬本身也有模式,有什么区别

使用Joi模式并使用plugin而不是Mongoose如何?

Mongoose和Joi模式之间的区别 猫鼬的模式:这是定义模型及其将接受的字段的地方

例如

这里你是说用户模型只接受用户名和电子邮件,两者都是字符串


Joi的模式:在这里,您定义了验证规则,以在创建文档之前验证接收到的数据
例如

这就是使用Joi模式定义规则的方式

  • username
    字段必须是一个字符串,字母num,长度在3到30之间
  • email
    字段必须是字符串和电子邮件
结果将以对象的形式存储在
result
常量中



我以前也没用过猫鼬,但Joi并不依赖猫鼬。因此,我想使用
monojs

是可以的。您解释了这两种方法的区别,但是否有理由同时使用这两种方法(我已经看到了两个例子,其中两种方法都用于验证用户输入)?使用这两种方法的原因-在特定级别上进行验证。通过mongoose提供的模型方案验证,我们可以在应用程序级别验证数据,所以在将数据持久化到数据库之前。使用Joi,我们可以在请求级别验证数据。因此,我们没有深入到数据持久化,但我们在将请求对象放入数据库的逻辑之前停止了。
const Schema = require('mongoose').Schema;
const UserSchema = new Schema ({
  username: String
  email: String
})
const User = mongoose.module("user", UserSchema))
const receivedData = {username: "John Doe", email: "doe.john@gmail.com"}
const Joi = require('joi');
const schema = Joi.object().keys({
    username: Joi.string().alphanum().min(3).max(30).required(),
    email: Joi.string().email()
})
const result = Joi.validate(receivedData, schema)