gpt4 book ai didi

node.js - Mongoose 模型中的自定义实例或静态方法中的验证错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:59 25 4
gpt4 key购买 nike

我有一个带有 session 和参与者数组的基本 Mongoose 模型:

var MeetingSchema = new Schema({
description: {
type: String
},
maxNumberOfParticipants: {
type: Number
},
participants: [ {
type: Schema.ObjectId,
ref: 'User'
} ]
});

假设我想验证添加的参与者数量是否未超过该 session 的 maxNumberOfParticipants。

我考虑了几个选项:

  1. 自定义验证器 - 我无法执行此操作,因为我必须根据另一个属性(参与者长度)验证另一个属性(maxNumberOfParticipants)。
  2. 中间件 - 即预保存。我也无法这样做,因为我添加的参与者是通过 findOneAndUpdate 进行的(除非我使用 save,否则不会调用这些参与者)。
  3. 添加验证作为我的 addParticipants 方法的一部分。这看起来很合理,但我不确定如何从模型传回验证错误。

请注意,我不想在 Controller (express、MEAN.js 堆栈)中实现验证,因为我想保留模型上的所有逻辑和验证。

这是我的 addParticipants 方法:

MeetingSchema.methods.addParticipant = function addParticipant(params, callback) {
var Meeting = mongoose.model('Meeting');
if (this.participants.length == this.maxNumberOfParticipants) {
// since we already have the max length then don't add one more
return ????
}
return Meeting.findOneAndUpdate({ _id: this.id },
{ $addToSet: { participants: params.id } },
{new: true})
.populate('participants', 'displayName')
.exec(callback);
};

不确定在这种情况下如何返回验证错误,或者即使此模式是推荐的方法。

最佳答案

我不认为这是在 Mongoose 模式级别完成此操作的常见做法。通常,在被调用的函数和执行某种验证(例如检查最大计数)的数据库层(您的架构)之间会有一些东西。您可能希望您的数据库层负责执行简单/基本的数据操作,这样您就不必担心当/如果有其他东西调用它时任何额外的依赖项。这可能意味着您需要采用您建议的路线 1,是的,您需要执行数据库请求来了解您当前的参与者数量,但我认为从长远来看,它将对您有所帮助:)

关于node.js - Mongoose 模型中的自定义实例或静态方法中的验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24856556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com