hasOwnProperty不能在Mongoose中预先validation

我有一个架构 –

var PostSchema = new mongoose.Schema({ title: String, link: String, author: {type:String,required:true}, upvotes: {type: Number, default: 0}, comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }] }); PostSchema.pre('validate',function(next){ console.log("Pre validate document printing - "); console.log(this); console.log("Pre validate called. Title : ",this._id); console.log("Author is : ",this.author); console.log("hasOwnProperty : ",this.hasOwnProperty("author")); console.log("this.author==\'\' : ",this.author==''); if(!(this.hasOwnProperty("author"))||this.author==''){ console.log("Here"); this.author="Hacked"; } next(); }); 

在我的路线 –

 router.post('/posts', auth,function(req, res, next){ console.log(req.body); console.log("Before - "); var post = new Post(req.body); post.upvotes="2"; console.log(post); post.author="Meseeks"; console.log("After - "); console.log(post); console.log("Creating author"); //post.author = req.payload.username; post.save(function(err, post){ if(err){return next(err);} res.json(post); }); }); 

Nodejs日志 – 打印这个 –

 Before - { title: 'im mr meeseeks', link: null, _id: 589f0f3ddf781803b459dc00, comments: [], upvotes: 2 } After - { author: 'Meseeks', title: 'im mr meeseeks', link: null, _id: 589f0f3ddf781803b459dc00, comments: [], upvotes: 2 } Creating author Pre validate document printing - { author: 'Meseeks', title: 'im mr meeseeks', link: null, _id: 589f0f3ddf781803b459dc00, comments: [], upvotes: 2 } Pre validate called. Title : 589f0f3ddf781803b459dc00 Author is : Meseeks hasOwnProperty : false this.author=='' : false Here Post validate called. Title : 589f0f3ddf781803b459dc00 Pre save called. Title : 589f0f3ddf781803b459dc00 Post save called. Title : 589f0f3ddf781803b459dc00 

我正在手动设置作者在我的路由器。 但是,pre init函数无法validation对象中是否存在属性“author”。 这怎么可能? 难道我做错了什么??

如何检查该属性是否存在于初始化中?

在这个代码中,“this”不是Object,只是一个原型。 这里提供了更多解释和解决方法。