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 相关文章推荐
如何在标题栏显示框架内页面的标题
Feb 03 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
Jan 03 Javascript
node.js中的fs.rmdir方法使用说明
Dec 16 Javascript
简介JavaScript中的setHours()方法的使用
Jun 11 Javascript
javascript实现rgb颜色转换成16进制格式
Jul 10 Javascript
js文字横向滚动特效
Nov 11 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
Nov 02 Javascript
canvas绘制环形进度条
Feb 23 Javascript
JavaScript 九种跨域方式实现原理
Feb 11 Javascript
Vue传参一箩筐(页面、组件)
Apr 04 Javascript
分享JS表单验证源码(带错误提示及密码等级)
Jan 05 Javascript
js实现轮播图效果 纯js实现图片自动切换
Aug 09 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
redis 队列操作的例子(php)
2012/04/12 PHP
php计算十二星座的函数代码
2012/08/21 PHP
php中session使用示例
2014/03/29 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
window.open的功能全解析
2006/10/10 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
使用vue2实现购物车和地址选配功能
2018/03/29 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
Pycharm学习教程(2) 代码风格
2017/05/02 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
Python WEB应用部署的实现方法
2019/01/02 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
python Pexpect模块的使用
2020/12/25 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
致全体运动员广播稿
2014/02/01 职场文书
2014政务公开实施方案
2014/02/19 职场文书
大学生创业项目方案
2014/03/08 职场文书
公司会议策划方案
2014/05/17 职场文书
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers