2017-02-11 4 views
1

У меня есть схема -hasOwnProperty не работает в предварительном Validate в Мангуста

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); 
    }); 
}); 

The 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 не может проверить, существует ли свойство объекта «автор» в объекте. Как это возможно? Я делаю что-то неправильно??

Как проверить, существует ли это свойство в pre init?

ответ

1

В этот момент в коде это «это» не объект, просто прототип. Дополнительные пояснения и обходные способы предоставляются here.

 Смежные вопросы

  • Нет связанных вопросов^_^