pre中间件使用undefined

发布于 2022-09-08 00:05:23 字数 1403 浏览 13 评论 0

1 出现Cannot set property 'updateAt' of undefined 错误,但是数据库里是有数据的

"use strict"


const PostSchema = Schema({
    title: String,
    meta:{
        createdAt:{
            type:Date,
            default:Date.now()
        },updateAt:{
            type:Date,
            default:Date.now()
        }
    }
    }
);
PostSchema.pre('save',function(next){
    if(this.isNew){//Document.prototype.isNew  mongoose自己会识别
        this.meta.createdAt = this.meta.updateAt=Date.now()
    }else{
        console.log('notnew')
        this.meta.updateAt = Date.now();
    }
    console.log('save')
    next();
})

PostSchema.pre('findOneAndUpdate',function(next){  
    this.meta.updateAt = Date.now();  // Cannot set property 'updateAt' of undefined 
    console.log('findOneAndUpdate')
    next();
})

}
module.exports = mongoose.model('Post', PostSchema);

2、然后改成

PostSchema.pre(/^find/,function(next){ 
    console.log('find') 
    this.meta.updateAt = Date.now(); 
    next();
})

没有报错,但是没有输出‘find',明显没执行

3.update的时候用来save方法出现这个错误
:MongoError: E11000 duplicate key error collection: koa_vue_blog.posts index: id dup key: { : ObjectId('5bc1fa4354266f0d1d5e91c1') }

let o =new Post({
        _id:id,
        ...ctx.request.body
    })
   
let result= await dbHelper.Save(o);

不是this.isNew会自己判断出来吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文