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