我想检查我的文档是否有一个媒体URL,所以它应该有一个媒体类型,我添加了这个验证程序
mediaURL: {
type: String,
default: ''
},
mediaType: {
type: String,
enum: ['video', 'photo', 'audio', 'none'],
validate: {
validator: function () {
return( (this.mediaURL && this.mediaType) || !this.mediaURL );
},
message: 'There should be a mediaURL in the post to have a media type',
}
},
我正在使用 Mongoose ,它是不工作的,我仍然可以保存文件没有媒体类型,而有一个媒体网址。
我已经尝试了不同的方式来实现这样的验证方式
mediaType: {
type: String,
enum: ['video', 'photo', 'audio', 'none'],
validate: {
validator: function () {
if (!this.mediaURL) {
// No mediaURL, so mediaType is allowed to be empty
return true;
}
return !!this.mediaType; // Ensure mediaType is present when mediaURL is provided
},
message: 'There should be a mediaURL in the post to have a media type',
}
},
但还是不行
1条答案
按热度按时间flvlnr441#
您可以执行以下操作:
Schema.pre
为模式定义了一个pre-hook。这是一个中间件(而不是验证器函数),因此返回true
还是false
并不重要。执行中间件代码后,需要调用
next()
来继续执行。https://mongoosejs.com/docs/api/schema.html#Schema.prototype.pre()
invalidate()
将模式中的路径标记为无效,这将导致验证失败。这就是您的自定义验证发生的地方(通过检查
mediaURL
和mediaType
)。https://mongoosejs.com/docs/api/document.html#Document.prototype.invalidate()