node express中的一个问题

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)

}

})

图片描述

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

回答:

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)

}

})

}

})

以上是 node express中的一个问题 的全部内容, 来源链接: utcz.com/p/196766.html

回到顶部