node.js基于mongodb的搜索分页示例


Posted in Javascript onJanuary 22, 2017

mongodb模糊查询并分页

1.建立数据库

代码如下:

var mongoose = require('mongoose');
var shortid = require('shortid');
var Schema = mongoose.Schema;

var IndexDataSchema = new Schema({
  _id: {
    type: String,
    unique: true,
    'default': shortid.generate
  },
  type: String,
  city: String,
  name:string,
  value: [{name: String, value: String}],
  create: {type: Date, default: Date.now},
  expand: String
});

IndexDataSchema.statics = {
  defaultSort: {'create': 1},
  defaultOptions: {'pageSize': 0}

};


var IndexData = mongoose.model('IndexData', IndexDataSchema);

module.exports = IndexData;

页面布局 这里只需要搜索框和搜索按钮,再点击按钮时,执行search()方法并发送请求

代码如下:

<div class="searchPart">
          <input type="text" class="form-control" id="txtSearch" placeholder="请输入项目名称">
          <button class="btn btn-success search_btn" onclick="search()">搜索</button>
        </div>
        <script>
  var paginObj;
  
  //设置每页显示页码
  var pageSize = 20; 
   
  //设置当前页码为1
  var currentPage = 1;
  
  var condition = {'city': currentCityId, 'name': ''}
  jQuery(document).ready(function () {
    refresh();
  });
  
 //获取查找条件
  function getCondition() {
    var name = $('#txtSearch').val();
    if (name && name.trim()) {
    // {'$regex': name, '$options': 'i'}}为模糊查询固定语法,name为参数
      condition = {'city': currentCityId, 'name': {'$regex': name, '$options': 'i'}};
    }
    else {
      condition = {'city': currentCityId}
    }
    return condition;
  }
  
   //刷新页面
  function refresh() {
  
  //查找内容
    $.get('/Manage/list/projects', {
      'pageSize': pageSize,
      'currentPage': currentPage,
      'condition': getCondition()
    }, function (result) {
      appendData(result.data);
    })

//查找个数
    $.get('/Manage/listCount/projects', {'condition': condition}, function (result) {
      paginObj = new DataPagin(document.querySelector('.projects-list'), result.count, {
        'pageSize': pageSize,
        'changePageFun': rquestPageData
      });
    })
  }

//重新分页
  function rquestPageData(currentPage, callback) {
    $.get('/Manage/list/projects', {
      'pageSize': pageSize,
      'currentPage': currentPage,
      'condition': getCondition()
    }, function (result) {
      appendData(result.data);
    })
    if (callback) {
      callback();
    }
  }

//改变页码,显示相应的内容
  function changePage(paginObj, index) {
    paginObj.setPageNumber(index);
  }

  function appendData(data) {
    //debugger;
    var list = $('.projects-list').children('tbody');
    list.html('');
    // 页面显示模板
    for (var i = 0; i < data.length; i++) {
    
      .........
      //此部分自己定义
      
   
    })
  }

 
   //点击搜索按钮执行该方法
  function search() {
    currentPage = 1;
    refresh();
  }


</script>

到数据库查找并返回相应内容

var formidable = require("formidable");
  var common = require('./common');
  var path = require("path");
  var fs = require('fs');
  var path = require('path');
  var guid = require('guid');
  var shortid = require('shortid');
  
  var AuctionHouse = require('./db/IndexData');


 var funs = {
  getList: function (collectionName, req, res, next) {
    var mainObj = transformCollctionName(collectionName);
    if (!mainObj) {
      next();
    }
    var options = req.query;
    var sort = options.sort || mainObj.defaultSort;
    var pageSize = options.pageSize || mainObj.defaultOptions.pageSize;
    var currentPage = options.currentPage || 1;
    var condition = options.condition || {}
    
    //此部分为查找条件
    mainObj.find(condition).sort(sort).skip((currentPage - 1) * pageSize).limit(pageSize).exec(function (err, docs) {
      if (err) {
        next(err);
      }
      return res.json(common.returnData(true, docs));
    })
  },
  countList: function (collectionName, req, res, next) {
    var mainObj = transformCollctionName(collectionName);
    if (!mainObj) {
      next();
    }
    var condition = req.query.condition || {}
    mainObj.find(condition).count().exec(function (err, docs) {
      if (err) {
        next(err);
      }
      return res.json({'count': docs});
    })
  },
  HandleEvent: function (collectionName, actionsName, req, res, next) {
    var mainFuns = getCollctionFuns(collectionName)
    if (!mainFuns) {
      next();
    }
    var fun = mainFuns[actionsName];
    if (!fun) {
      next();
    }
    fun(req, res, next);
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
extjs 学习笔记(二) Ext.Element类
Oct 13 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
Dec 03 Javascript
struts2+jquery+json实现异步加载数据(自写)
Jun 24 Javascript
jQuery的deferred对象使用详解
Sep 25 Javascript
Bootstrap在线电子商务网站实战项目5
Oct 14 Javascript
利用js的闭包原理做对象封装及调用方法
Apr 07 Javascript
使用Bootrap和Vue实现仿百度搜索功能
Oct 26 Javascript
Webpack中publicPath路径问题详解
May 03 Javascript
js计算两个日期间的天数月的实例代码
Sep 20 Javascript
javascript 内存模型实例详解
Apr 18 Javascript
javascript 函数的暂停和恢复实例详解
Apr 25 Javascript
Vue实现简易购物车页面
Dec 30 Vue.js
利用JS实现文字的聚合动画效果
Jan 22 #Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 #Javascript
jQuery实现的分页功能示例
Jan 22 #Javascript
jQuery加载及解析XML文件的方法实例分析
Jan 22 #Javascript
原生js实现类似fullpage的单页/全屏滚动
Jan 22 #Javascript
前端开发必知的15个jQuery小技巧
Jan 22 #Javascript
Vue.js学习之过滤器详解
Jan 22 #Javascript
You might like
PHP 5.0对象模型深度探索之绑定
2006/09/05 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
只需20行代码就可以写出CSS覆盖率测试脚本
2013/04/24 Javascript
js中的屏蔽的使用示例
2013/07/30 Javascript
jquery等待效果示例
2014/05/01 Javascript
javascript去除字符串左右两端的空格
2015/02/05 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
javaScript封装的各种写法
2017/08/14 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
Python中的yield浅析
2014/06/16 Python
Python使用OpenCV进行标定
2018/05/08 Python
基于Python函数和变量名解析
2019/07/19 Python
django 控制页面跳转的例子
2019/08/06 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
Python常用数据分析模块原理解析
2020/07/20 Python
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
机械工程师的岗位职责
2013/11/17 职场文书
酒店办公室文员岗位职责
2013/12/18 职场文书
教师申诉制度
2014/01/29 职场文书
探亲邀请信范文
2014/01/30 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
婚前协议书标准版
2014/10/19 职场文书
公司备用金管理制度
2015/08/04 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技