nodejs实现后台分类分页

  1. 获取前端传过来的数据写mongodb查询语句
  2. 使用async实现异步操作控制代码
  3. 先查询符合条件的总数再查询分页传给前端
var express = require('express');
var router = express.Router();
var async = require('async');
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://127.0.0.1:27017/';

// 获取图片列表  http://127.0.0.1:3000/api/album/list
router.get('/list', function (req, res) {
  var pageNum = parseInt(req.query.pageNum) || 1; // 当前第几页
  var pageSize = parseInt(req.query.pageSize) || 10; // 每页显示多少条
  var classify = parseInt(req.query.classify)
  var startTime = parseInt(req.query.startTime)
  var endTime = parseInt(req.query.endTime)

  var param = {};
  if (classify) param.classify = classify
  if (startTime || endTime) param.date = {}
  if (startTime) param.date['$gte'] = startTime
  if (endTime) param.date['$lte'] = endTime

  MongoClient.connect(url, {
    useNewUrlParser: true
  }, function (err, client) {
    if (err) {
      console.log('链接数据库失败', err);
      res.json({
        code: 1,
        msg: '网络异常, 请稍候重试'
      })
    } else {
      var db = client.db('myBlog');
      async.waterfall([
        function (cb) {
          db.collection('album').find(param).count(function (err, num) {
            if (err) {
              cb(err);
            } else {
              cb(null, num);
            }
          })
        },
        function (num, cb) {
          console.log(param);
          db.collection('album').find(param).skip(pageSize * pageNum - pageSize).limit(pageSize).toArray(function (err, data) {
            console.log(data);
            if (err) {
              cb(err);
            } else {
              cb(null, {
                num: num,
                data: data
              });
            }
          })
        }
      ], function (err, result) {
        if (err) {
          console.log(err);
          res.json({
            code: 1,
            msg: '错误'
          })
        } else {
          res.json({
            code: 0,
            msg: 'OK',
            data: {
              album: result.data,
              total: result.num
            }
          })
        }
        client.close();
      })
    }
  })
})
module.exports = router;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值