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显示隐藏层比较不错的方法分析
Sep 30 Javascript
jQuery 注意事项 与原因分析
Apr 24 Javascript
Jquery 设置标题的自动翻转
Oct 03 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
Dec 04 Javascript
javascript使用smipleChart实现简单图表
Jan 02 Javascript
Javascript必知必会(四)js类型转换
Jun 08 Javascript
jquery+ajax实现直接提交表单实例分析
Jun 17 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
Feb 23 Javascript
iview Upload组件多个文件上传的示例代码
Sep 30 Javascript
axios携带cookie配置详解(axios+koa)
Dec 28 Javascript
js实现轮播图效果 z-index实现轮播图
Jan 17 Javascript
ES6中new Function()语法及应用实例分析
Feb 19 Javascript
利用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
C# Assembly类访问程序集信息
2009/06/13 PHP
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
destoon二次开发常用数据库操作
2014/06/21 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
js中判断控件是否存在
2010/08/25 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
Javascript中 关于prototype属性实现继承的原理图
2013/04/16 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
招聘网站基于jQuery实现自动刷新简历
2015/05/10 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
angularjs实现天气预报功能
2020/06/16 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
python二分查找算法的递归实现方法
2016/05/12 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
对Python生成器、装饰器、递归的使用详解
2019/07/19 Python
python实现淘宝购物系统
2019/10/25 Python
python动态文本进度条的实例代码
2020/01/22 Python
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
园长自我鉴定
2013/10/06 职场文书
初中生期末考试的自我评价
2013/12/17 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
商务英语广告词大全
2014/03/18 职场文书
马智宇结婚主持词
2014/04/01 职场文书
五年级学生评语大全
2014/12/26 职场文书
小学母亲节活动总结
2015/02/10 职场文书