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模型中的数据的问题。

相关内容

热门资讯

微扑克辅助软件!微扑克ai机器... 微扑克辅助软件!微扑克ai机器人(辅助挂)一贯真的有挂1、打开德州poker外挂分析微扑克开挂官方版...
wepoke黑科技!wepok... wepoke黑科技!wepoke是是有辅助,we-poker一直真的有挂,我来教教你(有挂工具)是一...
分享实测!皮皮四川麻将至尊版有... 分享实测!皮皮四川麻将至尊版有没有挂(透明挂)都是真的是有挂(2026已更新)(哔哩哔哩)运皮皮四川...
微扑克辅助机器人!微扑克代打是... 微扑克辅助机器人!微扑克代打是真的,wpk竟然真的有挂,wpk教程(有挂攻略)1、微扑克ai辅助优化...
实测发现!旺旺福建麻将里面有没... 实测发现!旺旺福建麻将里面有没有猫腻(透视)果然有挂(2023已更新)(哔哩哔哩);1、旺旺福建麻将...
WePoKe透明挂!we辅助p... WePoKe透明挂!we辅助poker(透视)we-poker(果然真的有挂);致您一封信;亲爱we...
微扑克辅助器ios!微扑克真的... 微扑克辅助器ios!微扑克真的有挂(透明挂)确实真的是有挂是一款可以让一直输的玩家,快速成为一个“必...
传递经验!正宗河北麻将有挂吗(... 传递经验!正宗河北麻将有挂吗(透视)竟然真的是有挂(2020已更新)(哔哩哔哩);1、正宗河北麻将有...
wepoke智能ai!用ai外... 《wepoke智能ai!用ai外 挂打德州有用,wepoke中牌率,曝光教程(有挂辅助)》 wepo...
微扑克辅助挂!德州微扑克辅助神... 微扑克辅助挂!德州微扑克辅助神器app(辅助挂)切实存在有挂1、玩家可以在微扑克软件透明挂俱乐部对游...