【问题标题】:hasOwnProperty not working in pre validate in MongoosehasOwnProperty 在 Mongoose 的预验证中不起作用
【发布时间】:2017-06-29 19:51:39
【问题描述】:

我有一个架构 -

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”。这怎么可能?我是不是做错了什么??

如何检查该属性是否存在于 pre init 中?

【问题讨论】:

    标签: node.js mongodb mongoose mean-stack


    【解决方案1】:

    此时代码中的“this”不是一个对象,只是一个原型。 here 提供了更多解释和解决方法。

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      相关资源
      最近更新 更多