2017-02-11 80 views
1

我有一个模式 -hasOwnProperty预验证不工作在猫鼬

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函数无法验证对象中是否存在属性“author”。这怎么可能?难道我做错了什么??

如何检查是否在初始化之前存在的财产?

回答

1

在代码点是“这”不是一个对象,只是一个雏形。提供更多解释和解决方法here