Nodejs Express分页插件express-paginate的使用

Nodejs Express分页插件express-paginate的使用
express-paginate 是一个用于 Node.js 和 Express 的简单分页库。它可以帮助你轻松地实现分页功能。以下是使用 express-paginate 的基本步骤和示例代码。

安装

首先,你需要安装 express-paginate

npm install express-paginate

基本使用

  1. 创建路由:在你的 Express 路由中使用 express-paginate 提供的中间件来处理分页逻辑。
  2. 渲染视图:将分页信息传递给前端模板,以便显示分页链接。

示例代码

假设你有一个简单的博客应用,需要分页显示文章列表。

const express = require('express');
const app = express();
const paginate = require('express-paginate');

// 假设这是你的数据库查询函数
function getPosts(page, limit) {
  // 这里应该是你的数据库查询逻辑
  // 例如使用 MongoDB:
  // const posts = await Post.find().skip((page - 1) * limit).limit(limit);
  // 返回一个模拟数组
  return [
    { title: 'Post 1' },
    { title: 'Post 2' },
    { title: 'Post 3' },
    // ... 更多文章
  ];
}

app.get('/posts', (req, res) => {
  const page = req.query.page || 1;
  const limit = 10; // 每页的文章数量

  // 获取文章列表
  const posts = getPosts(page, limit);

  // 计算总数
  const totalItems = 100; // 假设有100篇文章

  // 渲染视图
  res.render('posts', {
    posts,
    pagination: paginate.getPagination(req, totalItems),
  });
});

// 渲染视图时,你可以这样使用分页链接
app.set('view engine', 'ejs'); // 使用 EJS 作为模板引擎

app.get('/', (req, res) => {
  res.render('index', {
    pagination: paginate.getPagination(req, 100), // 假设有100个分页链接
  });
});

视图模板 (EJS)

在你的视图模板中,你可以使用 pagination.getLinks(req) 来生成分页链接。

<!DOCTYPE html>
<html>
<head>
  <title>Posts</title>
</head>
<body>
  <ul>
    <% posts.forEach(function(post) { %>
      <li><%= post.title %></li>
    <% }) %>
  </ul>

  <!-- 分页链接 -->
  <%= pagination.getLinks(req) %>
</body>
</html>

注意事项

  • 确保你的数据库查询支持 skiplimit 方法(如 MongoDB)。
  • 根据实际需求调整每页显示的文章数量 (limit)。
  • 在生产环境中,确保对分页参数进行验证,以防止潜在的安全问题。

通过以上步骤,你可以轻松地为你的 Express 应用添加分页功能。


3 回复

当然,了解express-paginate插件能让你的分页逻辑变得轻松愉快!首先,你需要安装它:

npm install express-paginate

然后,在你的Express应用中,你可以这样使用它:

const express = require('express');
const paginate = require('express-paginate');

const app = express();

app.get('/items', (req, res) => {
  const itemCount = 100; // 假设总共有100项
  const itemsPerPage = 10;
  
  const pageCount = Math.ceil(itemCount / itemsPerPage);

  res.send({
    itemCount,
    pageCount,
    page: req.query.page || 1,
    limit: itemsPerPage,
    hasPrevPage: paginate.hasPrevPage(req, pageCount),
    hasNextPage: paginate.hasNextPage(req, pageCount),
    prevPage: paginate.getPrevPage(req, pageCount),
    nextPage: paginate.getNextPage(req, pageCount)
  });
});

app.listen(3000);

这样,你就可以通过查询参数来获取不同的页面数据了。希望这能让你的应用像坐过山车一样刺激又不失优雅!


express-paginate 是一个非常实用的 Node.js 中间件,用于处理分页逻辑。它可以帮助你轻松地实现前端请求分页数据时所需的分页链接生成及后端数据的分页查询。

安装

首先,你需要安装 express-paginate

npm install express-paginate --save

使用示例

以下是一个简单的使用 express-paginate 实现分页的例子。这里假设你有一个用户列表需要进行分页显示。

1. 创建路由

const express = require('express');
const paginate = require('express-paginate');
const app = express();

// 假设这是你的用户数据模拟函数
const getUsers = async (offset, limit) => {
    // 这里应该替换为你的数据库查询逻辑
    const users = Array.from({length: 100}, (_, i) => ({
        id: i + 1,
        name: `User ${i + 1}`
    }));

    return users.slice(offset, offset + limit);
};

app.get('/users', async (req, res) => {
    const {limit, skip} = paginate.getPaginationData(req);

    try {
        const users = await getUsers(skip, limit);
        const itemCount = 100; // 假设总共有100个用户
        const pageCount = Math.ceil(itemCount / limit);

        res.render('users', {
            users,
            page: req.query.page,
            pageCount,
            hasPrevPage: paginate.hasPrevPage(pageCount, req.query.page),
            hasNextPage: paginate.hasNextPage(pageCount, req.query.page),
            prevPage: paginate.getPrevPage(pageCount, req.query.page),
            nextPage: paginate.getNextPage(pageCount, req.query.page)
        });
    } catch (error) {
        console.error(error);
        res.status(500).send('Internal Server Error');
    }
});

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

2. HTML模板渲染(EJS)

在你的HTML模板中,你可以添加如下的分页链接:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Users</title>
</head>
<body>
    <h1>Users</h1>
    <ul>
        <% for (let user of users) { %>
            <li><%= user.name %></li>
        <% } %>
    </ul>

    <div class="pagination">
        <% if (hasPrevPage) { %>
            <a href="?page=<%= prevPage %>">Previous</a>
        <% } else { %>
            <span>Previous</span>
        <% } %>

        <% for (let i = 1; i <= pageCount; i++) { %>
            <a href="?page=<%= i %>" <%= page == i ? 'class="active"' : '' %>><%= i %></a>
        <% } %>

        <% if (hasNextPage) { %>
            <a href="?page=<%= nextPage %>">Next</a>
        <% } else { %>
            <span>Next</span>
        <% } %>
    </div>
</body>
</html>

以上就是使用 express-paginate 实现基本分页功能的完整过程。通过这种方式,你可以轻松地为你的应用增加分页功能,而无需手动计算和生成分页链接。

express-paginate 是一个用于 Node.js Express 应用的简单分页工具。首先需要通过npm安装该模块:

npm install express-paginate

在路由中使用时,可以通过 expressPaginate.middleware 设置每页项数和总项数:

const expressPaginate = require('express-paginate');

router.get('/items', (req, res, next) => {
  const itemCount = 10; // 每页项目数量
  const maxPages = 10; // 总页数

  req.query.pageOffset = expressPaginate.middleware(itemCount, maxPages)(req, res, next);
  
  // 查询数据库逻辑...

});

在模板中使用 expressPaginate.getPagination() 渲染分页链接:

!= expressPaginate.getPagination({
  url: '/items',
  now: req.query.pageOffset
})
回到顶部