我已经成功创建了Mongoose模型并为其属性添加了验证。例如,属性不能为空或必须唯一。当我创建新文档时,模型及其验证将按预期工作。但是问题是,
当我尝试更新文档时,验证不起作用,它接受空白或重复值,无法理解这里出了什么问题。
我的模特
/**
* Module dependencies.
*/
const mongoose = require('mongoose');
const crypto = require('crypto');
const Schema = mongoose.Schema;
/**
* User Schema
*/
const ProductSchema = new Schema({
brandName: { type: String, default: '', index: true },
unit: { type: String, default: '' }
});
/**
* Validations
*/
ProductSchema.path('brandName').validate(function (brandName) {
if (this.skipValidation()) return true;
return brandName.length;
}, 'Brand Name cannot be blank');
ProductSchema.path('brandName').validate(function (brandName) {
return new Promise(resolve => {
const Product = mongoose.model('Product');
if (this.skipValidation()) return resolve(true);
// Check only when it is a new brandName or when brandName field is modified
if (this.isNew || this.isModified('brandName')) {
Product.find({ brandName }).exec((err, products) => resolve(!err && !products.length));
} else resolve(true);
});
}, 'Product Name `{VALUE}` already exists');
ProductSchema.path('unit').validate(function (unit) {
if (this.skipValidation()) return true;
return unit.length;
}, 'Unit cannot be blank');
/**
* Methods
*/
ProductSchema.methods = {
skipValidation: function () {
return false;
}
};
ProductSchema.pre('findOneAndUpdate', function(next) {
this.options.runValidators = true;
next();
});
const ProductModel = mongoose.model("Product", ProductSchema);
module.exports = ProductModel;
我正在尝试为ProductName实施它,但是无法正常工作。
我已经为findOneAndUpdate添加了预钩,但是现在我遇到了错误
reason: TypeError: this.skipValidation is not a function
at C:\1-projects\om\ProductManager\Model\productModel.js:53:12