node express中的一个问题

发布于 2022-09-06 04:17:52 字数 4388 浏览 11 评论 0

app.get('/api/mes/get',function(req,res){
    const wa = req.session.wa 
    if(!req.session.name){
        res.json({code:100})//么登录
        return;
    }else{
        db.limModel.findOne({name:req.session.name},(err,doc)=>{
            //更新限制次数
            var key = doc.getnum;
            key++;
            if(!err){
                if(key<10){
                    db.limModel.update({name:req.session.name},{getnum:key},(e,d)=>{
                        if(!e){
                            db.mesModel.find().count(function(err,num){
                                var maxnum = num 
                                if(!err){
                                    function ya(){
                                        var randnum = Math.round(maxnum*Math.random());
                                        if(wa.indexOf(randnum) == -1){
                                            wa.push(randnum)
                                            console.log(randnum)
                                            return randnum
                                        }else{
                                            return ya();
                                        }
                                    }
                                    ya()
                                    console.log(req.session.wa)
                                    db.mesModel.find().skip(ya()).limit(1).exec(function(err,doc){
                                        const d1 = doc;
                                        db.userDetailsModel.findOne({name:req.session.name},(e,d)=>{
                                            if(!e){
                                                res.json({d1,d})
                                            }
                                        });
                                    })
                                }
                            })
                        }else{
                            console.log(e)
                        }
                    });
                }else{
                    res.json({code:200})//每天10次
                }
            }else{
                console.log(err)
            }
        })
    }
})

问题出现在打印的那个console.log(randnum)和console.log(req.session.wa)中,已经设置了req.session.wa为一个空的数组

目的是,通过mongo的skip来达到随机取数据,skip的值为随机数,为了让不取到重复的值,就把已经取过了的skip的值放进session里,但是测试的时候发现不对
图片描述

从第一次取随机数之后,后面的都进行了两两次随机数取值,然后单独把skip那一段打印

db.limModel.findOne({name:'ba'},(err,doc)=>{
            var wa = new Array()
            var key = doc.getnum;
            key++;
            if(!err){
                if(key<10){
                    db.limModel.update({name:'ba'},{getnum:key},(e,d)=>{
                        if(!e){
                            db.mesModel.find().count(function(err,num){
                                var maxnum = num 
                                if(!err){
                                    function ya(){
                                        var randnum = Math.round(maxnum*Math.random());
                                        console.log(randnum)
                                        if(wa.indexOf(randnum) == -1){
                                            wa.push(randnum)
                                            console.log(randnum)
                                            return 
                                        }else{
                                            return ya();
                                        }
                                    }
                                    ya();
                                    db.mesModel.find().skip(ya()).limit(1).exec(function(err,doc){
                                    })
                                }
                            })
                        }else{
                            console.log(e)
                        }
                    });
                }else{
                    res.json({code:200})//每天10次
                }
            }else{
                console.log(err)
            }
        })

图片描述

居然是这样的,为什么会出现这样的事啊,求大神讲一下啊

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不打扰别人 2022-09-13 04:17:52
app.get('/api/mes/get',function(req,res){
    const wa = req.session.wa 
    if(!req.session.name){
        res.json({code:100})//么登录
        return;
    }else{
        // 根据session中的name来查询数据
        db.limModel.findOne({name:req.session.name},(err,doc)=>{
            //更新限制次数
            var key = doc.getnum;
            // key++
            key++;
            if(!err){
                if(key<10){
                    // 根据session中的name来更新 getnum
                    db.limModel.update({name:req.session.name},{getnum:key},(e,d)=>{
                        if(!e){
                            //更新完成后,统计mesModel中条目数量
                            db.mesModel.find().count(function(err,num){
                                // 得到mesModel中的条目数量
                                var maxnum = num 
                                if(!err){
                                    // 随机数生成方法
                                    function ya(){
                                        var randnum = Math.round(maxnum*Math.random());
                                        // 判断 session中的wa值 是否和randnum相等
                                        if(wa.indexOf(randnum) == -1){
                                            // 如果相等,添加值到wa数组中
                                            wa.push(randnum)
                                            console.log(randnum)
                                            return randnum
                                        }else{
                                            return ya();
                                        }
                                    }
                                    // 立即执行,应该得到一个随机数的值
                                    ya() // 第一次执行
                                    // 输出最新的数组
                                    console.log(req.session.wa)
                                    // mesModel 中获取数据,并且跳过ya();  这里已经代码有问题,上面执行过一次,这里又创建一个随机数值。
                                    db.mesModel.find().skip(ya()/*第二次执行*/).limit(1).exec(function(err,doc){
                                        const d1 = doc;
                                        db.userDetailsModel.findOne({name:req.session.name},(e,d)=>{
                                            if(!e){
                                                res.json({d1,d})
                                            }
                                        });
                                    })
                                }
                            })
                        }else{
                            console.log(e)
                        }
                    });
                }else{
                    res.json({code:200})//每天10次
                }
            }else{
                console.log(err)
            }
        })
    }
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文