【问题标题】:Mongoose schema validate array with defined valuesMongoose 模式验证具有定义值的数组
【发布时间】:2019-05-17 05:27:52
【问题描述】:

我是 mongoose 的新手,并尝试使用 enum 等预定义值来验证数组。 下面是我的架构

const movieSchema = new mongoose.Schema({
language:{
    type:[String],  
    enum : ['Hindi','English','Gujarati','Marathi'], 
    required:true
}
});

以下是用于验证数组值的 JOI 架构

const schema = { 
 language:Joi.array().min(1).required()  
};

如何验证,以便可以将 Language 字段保存为 mongodb 中的数组。

下面是要发布的有效 json 数组

 {"language":["Hindi","English"] }

以下是无效的 json,它不应该验证架构。

 {"language":["French","Spanish","English"] }

【问题讨论】:

    标签: express mongoose mongoose-schema joi


    【解决方案1】:

    根据新版本,我认为我们应该在数组之前使用 ... 展开。如果没有 ... 运算符,我会遇到错误。

    private readonly groupSchema = object({
        name: string().required().alphanum().min(5).max(100),
        permissions: Joi.array().items(Joi.string().valid(...['READ', 'WRITE', 'DELETE', 'SHARE', 'UPLOAD_FILES'])).min(1).unique().required()
    });
    

    【讨论】:

      【解决方案2】:

      .items() 中使用.valid()

      const schema = { 
        language: Joi.array()
          .items(Joi.string().valid(['Hindi', 'English']))  // only allow(valid) 'Hindi' or 'English' items in array
          .min(1).required()
      };
      

      【讨论】:

      • 它可以工作,但在这种情况下,它只需要一个值。我收到此错误消息是因为错误消息““语言”必须是 [印地语、英语、古吉拉特语、马拉地语]之一”。我想传递值的数组而不仅仅是一个
      • 如果需要多个有效项,可以省略.min(1)
      • 忽略上面的评论。 :) 你有特定的valid 语言和invalid 语言吗?您示例中的“英语”包含在validinvalid 中。有点困惑。
      • 这是有效的数组 ['Hindi','English','Gujarati','Marathi']。没有它的任何东西都应该以错误结束。例如,如果我发布这个 json {"language":["French","Spanish","English"] } 那么它应该给我一个错误,因为法语和西班牙语不在我定义的数组中。
      • 所以,您只允许四种语言,对吗?然后只需将 'Gujarati', 'Marathi' 添加到有效数组中。
      猜你喜欢
      • 1970-01-01
      • 2012-10-28
      • 2013-11-13
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多