将 Joi 模式与 Mongoose 模式一起使用?
Posted
技术标签:
【中文标题】将 Joi 模式与 Mongoose 模式一起使用?【英文标题】:Using Joi schemas alongside Mongoose schemas? 【发布时间】:2019-01-06 20:08:28 【问题描述】:我想阻止将用户输入插入 MongoDB。 我想正确验证用户输入。
Joi 提供基于模式的验证来测试用户输入。 实际上听起来不错。
Mongoose 本身也有模式,有什么区别?
使用 Joi 架构并使用 mongojs 插件而不是 Mongoose 怎么样?
【问题讨论】:
【参考方案1】:Mongoose 和 Joi 的架构之间的区别
Mongoose 的架构:您可以在此处定义模型以及它将接受的字段
例如。
const Schema = require('mongoose').Schema;
const UserSchema = new Schema (
username: String
email: String
)
const User = mongoose.module("user", UserSchema))
这里你说 User 模型将只接受用户名和电子邮件,并且两者都将是字符串。
Joi 的架构: 您可以在此处定义验证规则,以在创建数据文档之前验证接收到的数据。 例如。
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)
这就是您使用 Joi 架构定义规则的方式
username
字段必须是字符串、字母数字,长度在 3 到 30 之间
email
字段必须是字符串和电子邮件
结果将以对象的形式存储在result
常量中。
而且我之前没有使用过mongojs
,但 Joi 不会转播 Mongoose。所以我想使用monojs
会很好。
【讨论】:
您解释了区别,但是否有理由同时使用两者(我见过几个例子,两者都用于验证用户输入)? 同时使用两者的原因 - 特定级别的验证。通过 mongoose 模型方案验证,我们可以在 应用程序级别 验证数据,因此在将其持久化到数据库之前。使用 Joi,我们可以在 请求级别 验证数据。所以我们不至于数据持久化,但我们在此之前停止,在将请求对象放入数据库的逻辑之前。以上是关于将 Joi 模式与 Mongoose 模式一起使用?的主要内容,如果未能解决你的问题,请参考以下文章