Nodejs分页设计配合bootstrap-paginator

Nodejs分页设计配合bootstrap-paginator

alt nodejs分页设计配合bootstrap-paginator

前言

分页功能是查询的必备功能,比如我要查询一个多于1000条记录的结果集。如果一次全部展示,不仅浪费带宽,增长等待时间,用户看到这么多的数据也会觉得的头疼。但是有了分页功能,可以根据用户的习惯,一页一页的处理少量的数据,展示少量的数据,就像是在看书一样的。

分页功能非常实用,但是实现起来也稍有复杂。不仅要考虑到前端的展示和传值问题,还要考虑后端面向数据的查询语句。不过我也发现了前端和后端对应的解决的方案。前端程序可以通过bootstrap-paginator项目来封装,而后端我是自己实现的。本来是准备使用mongoose-paginate项目,但他的设计过于简单,而且与bootstrap-paginator的一些传参习惯不符,自已实现其实更好控制。

目录

分页前端雏形bootstrap-paginator 分页后端查询mongoose 分页结果返回页面(后端->前端) 分页查询参数传递(前端->后端) 分页完整展现

请查看博客文章
http://blog.fens.me/nodejs-bootstrap-paginator/

alt 分页完整展现


2 回复

Nodejs分页设计配合bootstrap-paginator

前言

分页功能是查询大量数据时不可或缺的一部分。例如,当你需要查询超过1000条记录的结果集时,一次性加载所有数据不仅会消耗大量的带宽,还会增加用户的等待时间。通过分页功能,可以将数据分成若干小块,每次只显示一部分,这样用户可以更方便地浏览和处理数据。

目录

  • 分页前端雏形:bootstrap-paginator
  • 分页后端查询:mongoose
  • 分页结果返回页面(后端 -> 前端)
  • 分页查询参数传递(前端 -> 后端)
  • 分页完整展现

示例代码

1. 分页前端雏形:bootstrap-paginator

首先,我们需要在前端引入bootstrap-paginator插件。你可以从GitHub下载或者直接通过CDN引入。

<!-- 引入必要的CSS和JS文件 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-paginator/0.8.4/bootstrap-paginator.min.js"></script>

接下来,我们创建一个简单的HTML结构:

<div id="example">
    <table class="table table-striped">
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
            </tr>
        </thead>
        <tbody id="data"></tbody>
    </table>
    <ul id="pagination"></ul>
</div>

然后,初始化bootstrap-paginator

$(function () {
    var options = {
        bootstrapMajorVersion: 4,
        currentPage: 1,
        totalPages: 10,
        numberOfPages: 5,
        onPageClicked: function (event, originalEvent, type, page) {
            loadPage(page);
        }
    };
    $('#pagination').bootstrapPaginator(options);
});

2. 分页后端查询:mongoose

在后端,我们可以使用Mongoose来处理数据库查询。假设我们有一个名为User的模型。

const mongoose = require('mongoose');
const User = mongoose.model('User', new mongoose.Schema({
    name: String
}));

// 查询分页数据
async function loadPage(page, limit) {
    const skip = (page - 1) * limit;
    const users = await User.find().skip(skip).limit(limit);
    return users;
}

3. 分页结果返回页面(后端 -> 前端)

后端将分页后的数据返回给前端,可以使用JSON格式:

app.get('/users', async (req, res) => {
    const page = parseInt(req.query.page) || 1;
    const limit = 10; // 每页显示10条记录
    const users = await loadPage(page, limit);
    res.json(users);
});

4. 分页查询参数传递(前端 -> 后端)

前端通过AJAX请求向后端传递分页参数:

function loadPage(page) {
    $.ajax({
        url: '/users',
        method: 'GET',
        data: { page: page },
        success: function (data) {
            $('#data').empty();
            data.forEach(user => {
                $('#data').append(`<tr><td>${user.id}</td><td>${user.name}</td></tr>`);
            });
        }
    });
}

5. 分页完整展现

完整的分页展现包括前端的UI布局、数据加载和分页控件的交互。通过上述步骤,我们实现了前后端协同工作,以提供流畅的分页体验。

总结

通过上述步骤,我们展示了如何使用Node.js和Mongoose实现分页功能,并配合bootstrap-paginator插件进行前端展示。希望这些示例代码能够帮助你更好地理解和实现分页功能。


针对 “Nodejs分页设计配合bootstrap-paginator” 这个主题,这里提供一个简单的分页设计示例,包括前端和后端的部分。

前端:Bootstrap Paginator 配置

首先需要引入 bootstrapbootstrap-paginator 库:

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-paginator/0.8.4/bootstrap-paginator.min.js"></script>

接下来是 bootstrap-paginator 的初始化代码:

$(function() {
    var totalPages = 50; // 假设有50页
    $('#example').bootstrapPaginator({
        bootstrapMajorVersion: 3, // 指定版本号
        currentPage: 1, // 当前页码
        totalPages: totalPages, // 总页数
        numberOfPages: 10, // 显示多少页按钮
        onPageClicked: function(event, originalEvent, type, page) {
            fetchPageData(page);
        }
    });
});

function fetchPageData(pageNumber) {
    $.ajax({
        url: '/get-page-data',
        data: { page: pageNumber },
        success: function(response) {
            $('#pageContent').html(response.data);
        }
    });
}

后端:Node.js + Express 实现

安装必要的依赖:

npm install express mongoose

创建一个简单的 Express 路由处理分页请求:

const express = require('express');
const app = express();
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true, useUnifiedTopology: true });

// 假设有一个名为 Article 的模型
const Article = mongoose.model('Article', new mongoose.Schema({ title: String }));

app.get('/get-page-data', async (req, res) => {
    const page = parseInt(req.query.page, 10) || 1;
    const perPage = 10; // 每页显示10条数据
    const articles = await Article.find()
        .skip((page - 1) * perPage)
        .limit(perPage)
        .exec();

    res.json({ data: articles.map(article => article.title) });
});

app.listen(3000, () => console.log('Server running on port 3000'));

解释

  • 前端部分:通过 bootstrap-paginator 插件,实现了分页导航栏,点击分页按钮时会调用 fetchPageData 函数获取指定页码的数据。
  • 后端部分:Express 路由 /get-page-data 接收客户端的分页请求,从数据库中获取相应页的数据,并返回给前端。

这种方式将前后端分离,便于扩展和维护。

回到顶部