前言
在 Web 开发中,分页是一个常见的需求。Express.js 是一个流行的 Node.js Web 框架,而 MongoDB 是一个流行的 NoSQL 数据库。本文将介绍如何使用 Express.js 和 MongoDB 实现分页。
准备工作
在开始之前,需要安装以下软件:
- Node.js
- MongoDB
在安装完之后,可以创建一个新的 Express.js 项目,使用以下命令:
$ npx express-generator --view=ejs myapp $ cd myapp $ npm install
这将创建一个名为 myapp
的新项目,并使用 EJS 作为视图引擎。
实现分页
创建数据库
首先,需要创建一个名为 mydatabase
的 MongoDB 数据库。可以使用以下命令:
$ mongo > use mydatabase
创建数据模型
在 Express.js 中使用 Mongoose 来操作 MongoDB。在 models
目录下创建一个名为 user.js
的文件,用于定义用户数据模型。
// javascriptcn.com 代码示例 const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: String, email: String, password: String, }); const User = mongoose.model('User', userSchema); module.exports = User;
添加测试数据
在 routes
目录下创建一个名为 users.js
的文件,用于添加测试数据。
// javascriptcn.com 代码示例 const express = require('express'); const router = express.Router(); const User = require('../models/user'); router.get('/add', async (req, res, next) => { try { const users = [ { name: 'Alice', email: 'alice@example.com', password: 'password1' }, { name: 'Bob', email: 'bob@example.com', password: 'password2' }, { name: 'Charlie', email: 'charlie@example.com', password: 'password3' }, { name: 'David', email: 'david@example.com', password: 'password4' }, { name: 'Eve', email: 'eve@example.com', password: 'password5' }, { name: 'Frank', email: 'frank@example.com', password: 'password6' }, { name: 'Grace', email: 'grace@example.com', password: 'password7' }, { name: 'Heidi', email: 'heidi@example.com', password: 'password8' }, { name: 'Ivan', email: 'ivan@example.com', password: 'password9' }, { name: 'Judy', email: 'judy@example.com', password: 'password10' }, ]; await User.insertMany(users); res.send('Data added successfully!'); } catch (err) { next(err); } }); module.exports = router;
使用以下命令添加测试数据:
$ node ./bin/www
在浏览器中访问 http://localhost:3000/users/add
,将添加测试数据到 mydatabase
数据库中。
实现分页 API
在 routes
目录下创建一个名为 api.js
的文件,用于实现分页 API。
// javascriptcn.com 代码示例 const express = require('express'); const router = express.Router(); const User = require('../models/user'); router.get('/users', async (req, res, next) => { try { const page = parseInt(req.query.page) || 1; const limit = parseInt(req.query.limit) || 10; const skip = (page - 1) * limit; const users = await User.find().skip(skip).limit(limit); const count = await User.countDocuments(); const totalPages = Math.ceil(count / limit); const currentPage = Math.min(Math.max(1, page), totalPages); res.json({ users, totalPages, currentPage, }); } catch (err) { next(err); } }); module.exports = router;
这将创建一个名为 /api/users
的 API,用于返回用户列表和分页信息。API 接受两个可选参数:
page
:当前页数,默认为 1。limit
:每页显示的记录数,默认为 10。
测试分页 API
使用以下命令启动 Express.js 服务器:
$ node ./bin/www
在浏览器中访问 http://localhost:3000/api/users?page=1&limit=3
,将返回第一页的前三个用户,并显示分页信息:
// javascriptcn.com 代码示例 { "users": [ { "_id": "605f6a2a6f7d6d1c3a3a6b96", "name": "Alice", "email": "alice@example.com", "password": "password1", "__v": 0 }, { "_id": "605f6a2a6f7d6d1c3a3a6b97", "name": "Bob", "email": "bob@example.com", "password": "password2", "__v": 0 }, { "_id": "605f6a2a6f7d6d1c3a3a6b98", "name": "Charlie", "email": "charlie@example.com", "password": "password3", "__v": 0 } ], "totalPages": 4, "currentPage": 1 }
总结
本文介绍了如何使用 Express.js 和 MongoDB 实现分页。通过创建数据库、数据模型和测试数据,以及实现分页 API,可以方便地实现分页功能。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/655b1732d2f5e1655d54314f