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 相关文章推荐
Javascript 闭包引起的IE内存泄露分析
May 23 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
Aug 17 Javascript
jQuery取得设置清空select选择的文本与值
Jul 08 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
Oct 17 Javascript
javascript实现五星评分功能
Nov 10 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
Apr 14 Javascript
Javascript 事件冒泡机制详细介绍
Oct 10 Javascript
React组件的三种写法总结
Jan 12 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
May 26 Javascript
jquery ajax异步提交表单数据的方法
Oct 27 jQuery
jQuery实现高度灵活的表单验证功能示例【无UI】
Apr 30 jQuery
基于JQuery实现页面定时弹出广告
May 08 jQuery
利用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全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
2017/03/29 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
2018/08/10 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
vue项目中使用bpmn-自定义platter的示例代码
2020/05/11 Javascript
python查找第k小元素代码分享
2013/12/18 Python
python实现博客文章爬虫示例
2014/02/26 Python
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python转换HTML到Text纯文本的方法
2015/01/15 Python
举例详解Python中yield生成器的用法
2015/08/05 Python
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
python实现类之间的方法互相调用
2018/04/29 Python
python绘制热力图heatmap
2020/03/23 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
Python numpy大矩阵运算内存不足如何解决
2020/11/19 Python
个人素质的自我评价分享
2013/12/16 职场文书
护士检查书
2014/01/17 职场文书
社区工作感言
2014/02/21 职场文书
铁路安全事故反思
2014/04/26 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
班主任寄语2016
2015/12/04 职场文书