Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 使用mongoose hook重试保存重复键错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用mongoose中间件钩子重新尝试保存文档,以防初始保存失败并出现重复键错误.用例如下:

我的模型使用slugs进行识别,这是自动生成的.例如. item,item-2,item-3,…,item-n.如果项目已经存在,则应该向slug添加一个计数器.我不能提前检查“下一个”slu,因为我需要在任何情况下避免冲突.

由于这个逻辑将涉及几个不同的模型,我想将它分离成@L_246_4@mongoose插件.

这个想法是否可能?例如. scheR_933_11845@a.post(‘save’,handler)仅在成功保存时执行.还有其他钩子,我可以利用吗?

解决方法

我正在使用预保存挂钩检查slug是否已经存在以下代码,到目前为止似乎工作正常.

pagescheR_933_11845@a.pre('save',function(next){
    var page = this;

    page.createdDT = new Date();
    page.updatedDT = new Date();

    page.slug = page.title.slug(); // create slug from title

    var re = new RegExp(page.slug,'i');

    mongoose.models["page"].find({slug: { $regex: rE}},function(err,pages){
        // slug doesn't exist,good to go
        if(!err && !pages) return next();

        var slugs = [];

        // let's get all slugs
        pages.forEach(function(pagE){
            slugs.push(page.slug);
        });

        // keep increasing `i` until slug is unique
        // set i to 1 to avoid Hello-0 
        var i = 1;
        var tempSlug = page.slug;
        while(slugs.indexOf(tempSlug) >= 0){
            tempSlug = page.slug + '-' + i;
            i++;
        }

        //unique slug for example "Hello-2"
        page.slug = tempSlug;
        next();
    }); 
});

大佬总结

以上是大佬教程为你收集整理的node.js – 使用mongoose hook重试保存重复键错误全部内容,希望文章能够帮你解决node.js – 使用mongoose hook重试保存重复键错误所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。