Node.js查询数据库进行分页和排序

准备

MongoDB数据的结构

WechatIMG17.jpeg

vue页面,axios做的代理,不懂怎么做代理可以查看Node.js连接MongoDB,vue的axios做代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div id="axios">
<div>
<button @click="get(1,4)">get1</button>
<button @click="get(-1,4)">get-1</button>
<button @click="post">post</button>
</div>
<div>
<button @click="page++">page++</button>
<button @click="page--">page--</button>
<span>{{page}}</span>
</div>
<div class="list">
<ul>
<li v-for="lists in list">
姓名:{{lists.name}}
年龄:{{lists.age}}
</li>
</ul>
</div>
</div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
data (){
return {
list : [],
page : 1
}
},
methods:{
get(sort,pageSize){
axios.get('/goods',{
params : {
sort : sort,//排序
page : this.page,
pageSize : pageSize
}
}).then((res)=>{
this.list = res.data.result.list
if(this.list.length <= 0){
this.list = [{name:'没有了',age:'真的没有了'}]
}
console.log(res.data);
})
}
}

排序和分页

升序或者降序,这里都是前端传值。用的sort()方法,所以前端传1,或者-1就行。

一页多少,第几页,也是前端传值,所以需要前端判断。

打开node.jsroutes文件夹下面的goods.js文件,对部分进行修改,之前的配置在这里Node.js连接MongoDB,vue的axios做代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
router.get('/',(req,res,next)=>{
//排序
let sort = req.param('sort');//获取前端的传值‘sort’字段的值
//分页
let page = parseInt( req.param('page') );//当前第几页
let pageSize = parseInt( req.param('pageSize') );//一页多少条
let skip = (page - 1) * pageSize;
let params = {};//定义一个查找的方法
let goodsModel = Goods.find(params).skip(skip).limit(pageSize);//通过这样的查找方法去定义一个模型,可以通过这个模型去做别的事。
//skip()表示需要跳过多少条。
//limit()表示向后查找多少条。
goodsModel.sort({'age' : sort});//MongoDB里面全是对象,所以查找也是对象,1为升序,-1为降序
//返回数据,成功,失败
goodsModel.exec((err,doc)=>{//这里改为goodsModel.extc,因为前面已经拿到参数了,第一个{}也可以删掉了
//格式自定
if(err){
res.json({
status:'1',
msg:err.message
})
}else{
res.json({
status:'0',
msg:'成功',
result:{
count:doc.length,
list:doc
}
})
}
});
})

启动

开启node.js,MongoDB和vue

通过vue发送一个get请求,得到下面结果



我,曼妥思,打钱