gpt4 book ai didi

node.js - Mongoose 异步调用另一个模型使验证变得不可能

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

我有两个 Mongoose 模式,如下所示:

var FlowsSchema = new Schema({
name: {type: String, required: true},
description: {type: String},
active: {type: Boolean, default: false},
product: {type: Schema.ObjectId, ref: 'ClientProduct'},
type: {type: Schema.ObjectId, ref: 'ConversionType'},
});

然后将该架构嵌入到父架构中,如下所示:

var ClientCampaignSchema = new Schema({
name: {type: String, required: true},
description: {type: String},
active: {type: Boolean, default: false},
activeFrom: {type: Date},
activeUntil: {type: Date},
client: {type: Schema.ObjectId, ref: 'Client', required: true},
flows: [FlowsSchema]
});

var ConversionTypeSchema = new Schema({
name: {type: Schema.Types.Mixed, required: true},
requiresProductAssociation: {type: Boolean, default: false}
});

如您所见,我的 FlowsSchema 包含对 ConversionType 的引用。我想要做的只是在关联转换类型的“requiresProductAssociation”等于 true 的情况下才允许将产品添加到流程中。不幸的是,无论我使用验证器还是中间件,这都意味着调用 mongoose.model('ConversionType') ,它会自动异步并把事情弄乱。做什么?

附:如果有一种方法可以存储对 requireProductAssociation bool 值的引用而不是整个对象,那就太好了,因为我不再需要对该模型进行异步调用,但我不知道这是否可能。

最佳答案

SchemaType#validate 的文档描述如何对此类情况执行异步验证。异步验证器函数接收两个参数,第二个参数是您调用的回调函数,用于异步报告该值是否有效。

这可以让您实现此验证:

FlowsSchema.path('type').validate(function(value, respond) {
mongoose.model('ConversionType').findById(value, function(err, doc) {
respond(doc && doc.requiresProductAssociation);
});
});

关于node.js - Mongoose 异步调用另一个模型使验证变得不可能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28283110/

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