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 相关文章推荐
js获取光标位置和设置文本框光标位置示例代码
Jan 09 Javascript
js style动态设置table高度
Oct 21 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
Apr 15 Javascript
jQuery选择器用法实例详解
Dec 17 Javascript
实例讲解jquery与json的结合
Jan 07 Javascript
jquery form表单获取内容以及绑定数据
Feb 24 Javascript
从零学习node.js之express入门(六)
Feb 25 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
Mar 02 Javascript
js正则表达式验证密码强度【推荐】
Mar 03 Javascript
静态页面实现 include 引入公用代码的示例
Sep 25 Javascript
JavaScript实现身份证验证代码实例
Aug 26 Javascript
js基础语法与maven项目配置教程案例
Jul 15 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
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
使用js写的一个简易的投票
2013/11/27 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
js密码强度校验
2015/11/10 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
nodejs 最新版安装npm 的使用详解
2018/01/18 NodeJs
layui select获取自定义属性方法
2018/08/15 Javascript
JS实现滑动插件
2020/01/15 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
python通过函数属性实现全局变量的方法
2015/05/16 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
对Python信号处理模块signal详解
2019/01/09 Python
Python 窗体(tkinter)按钮 位置实例
2019/06/13 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
将tensorflow模型打包成PB文件及PB文件读取方式
2020/01/23 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
html5录音功能实战示例
2019/03/25 HTML / CSS
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
英国折扣高尔夫商店:Discount Golf Store
2019/11/19 全球购物
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
浪费资源的建议书
2014/03/12 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
工作推荐信范文
2014/05/10 职场文书
法学求职信
2014/06/22 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
走群众路线学习笔记
2014/11/06 职场文书