Asynccustomvalidatorsmongoose
创始人
2024-09-21 02:30:32
0

在Mongoose模型中,可以使用内置的验证器或自定义验证器来验证文档中的数据。自定义验证器允许您执行更高级别的验证,例如在数据库中执行异步操作进行验证。以下是一种解决方案,可让您使用异步自定义验证器来验证Mongoose模型中的数据。

首先,在定义模型时,将验证器指定为异步函数,它将返回一个解析为true或false的Promise。例如,以下示例定义一个User模型,该模型包含一个电子邮件字段,该字段使用异步自定义验证器验证电子邮件是否唯一。

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
  email: {
    type: String,
    required: true,
    unique: true,
    validate: {
      validator: async function(value) {
        const user = await this.constructor.findOne({ email: value });
        if(user) {
          return false;
        }
        return true;
      },
      message: 'Email already exists!'
    }
  }
});

const User = mongoose.model('User', userSchema);

在上面的示例中,validate属性是一个包含validator和message属性的对象。validator属性包含异步函数,该函数在验证期间将执行。如果该函数返回false,则验证失败,并返回由message属性指定的错误消息。

请注意,要在自定义验证器函数中引用模型的其他字段,请使用this关键字。例子中的this.constructor引用了User模型本身。

现在,您可以像通常一样使用模型进行Mongoose CRUD操作。当您尝试使用已存在的电子邮件创建用户时,验证器将返回验证失败的错误消息。

const user = new User({
  email: 'test@test.com'
});

user.save()
  .catch(error => console.log(error.message)); // Email already exists!

希望这个解决方案能为您解决使用异步自定义验证器验证Mongoose模型中的数据的问题。

相关内容

热门资讯

刚刚!德州透视hhpoker,... 刚刚!德州透视hhpoker,wepoker辅助器官方,指引教程(有挂规律)-哔哩哔哩一、wepok...
近年来!pokerworld软... 近年来!pokerworld软件(透视)一贯真的有挂(有挂教程开挂辅助下载)-哔哩哔哩1、超多福利:...
这一问题亟待解决!hhpoke... 这一问题亟待解决!hhpoker透视工具,约局吧德州真的存在透视吗,方式教程(有挂辅助)-哔哩哔哩;...
事发当天!佛手在线大菠萝智能辅... 事发当天!佛手在线大菠萝智能辅助器(透视)果然是有挂(存在有挂开挂辅助软件)-哔哩哔哩1、佛手在线大...
最新消息!hhpoker软件安... 最新消息!hhpoker软件安装包,哈糖大菠萝有挂吗,要领教程(真实有挂)-哔哩哔哩1、哈糖大菠萝有...
据目击者称!sohoopoke... 据目击者称!sohoopoker辅助(透视)果然是有挂(有挂细节开挂辅助神器)-哔哩哔哩1、首先打开...
做出回应!哈糖大菠萝开挂,wp... 做出回应!哈糖大菠萝开挂,wpk插件,法子教程(今日头条)-哔哩哔哩1、完成哈糖大菠萝开挂的残局,帮...
据公告内容!wepoker私人... 据公告内容!wepoker私人定制透视(透视)一直是有挂的(有挂详细开挂辅助神器)-哔哩哔哩1、完成...
出乎意料的是!wepoker黑... 出乎意料的是!wepoker黑侠辅助器,hhpoker有透视功能吗,步骤教程(存在有挂)-哔哩哔哩小...
据公告内容!wepoker好友... 据公告内容!wepoker好友局透视(透视)果然有挂(详细教程开挂辅助插件)-哔哩哔哩亲,关键说明,...