【问题标题】:Using Joi schemas alongside Mongoose schemas?将 Joi 模式与 Mongoose 模式一起使用?
【发布时间】:2019-01-06 20:08:28
【问题描述】:

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

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

Mongoose 本身也有模式,有什么区别?

使用 Joi 架构并使用 mongojs 插件而不是 Mongoose 怎么样?

【问题讨论】:

    标签: node.js mongodb mongoose schema joi


    【解决方案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,我们可以在 请求级别 验证数据。所以我们不至于数据持久化,但我们在此之前停止,在将请求对象放入数据库的逻辑之前。
    猜你喜欢
    • 2023-03-24
    • 2015-01-31
    • 1970-01-01
    • 2021-05-23
    • 2022-09-27
    • 2022-01-24
    • 2011-06-27
    • 2021-02-03
    • 2020-05-09
    相关资源
    最近更新 更多