如何在 Node.js 中使用跳过和限制创建分页?
Nodejs 是一个开源的跨平台运行时环境,用于在浏览器外执行 JavaScript 代码。它被广泛用于从小公司到大公司开发 API 和微服务。这是一个很好的工具,因为它使开发人员能够在服务器端和客户端使用 JavaScript。
什么是分页?
分页是一种非常有用的方法。这允许客户端获取页面中的数据。这是通过使用选项“跳过”和“限制”来实现的,让客户端可以完全控制他们正在返回的页面(数据)。
何时使用分页?
正如其声明所述,应使用分页:
- 当客户应该控制数据时,他们正在返回。
- 改善用户体验(UX)和更好的导航。
创建项目
步骤 1: 使用以下命令为项目创建新文件夹:
mkdir pagination
步骤 2: 使用以下命令导航到我们的文件夹:
cd pagination
步骤 3: 使用以下命令和服务器文件初始化 npm:
npm init -y
touch index.js
步骤 4: 使用以下命令安装所需的软件包:
npm i express mongoose
项目结构:如下图
示例 1: 不使用分页
index.js
// Requiring module
const express = require('express');
const mongoose = require('mongoose');
const port = 3000;
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
// Database URL
const MONGODB_URL = 'mongodb://127.0.0.1/pagination';
// Connecting Database through mongoose(ORM For Mongodb)
mongoose
.connect(MONGODB_URL, {
useCreateIndex: true,
useFindAndModify: false,
useUnifiedTopology: true,
useNewUrlParser: true,
})
.then(() => {
console.log('Database connected');
})
.catch((err) => {
console.log('Error in connecting database');
});
// Creating Schema for Posts, then it will
// be used in creating Model
const PostSchema = new mongoose.Schema({
name: String,
date: {
type: Date,
default: Date.now(),
},
});
const postModel = new mongoose.model('PostModel', PostSchema);
// For creating Posts
app.post('/', async (req, res) => {
const post = new postModel(req.body);
await post.save();
res.status(201).send('Successfully created');
});
// For Fetching Post
app.get('/', async (req, res) => {
try {
const posts = await postModel.find();
res.status(200).send(posts);
} catch (e) {
console.log(e);
}
});
// Starting the server
app.listen(port, () => {
console.log(`Started at ${port}`);
});
使用以下命令运行服务器:
node index.js
插入数据库:数据在邮递员的帮助下通过以下方法插入:
通过邮递员向“/”路径发出投递请求来插入数据库。
输出:无分页
不使用分页通过邮差获取数据。
从上面的例子中可以看出,没有分页,所有的文档都会被获取。更清楚分页的使用和需要。当有成千上万的文档而不仅仅是 4 个时,请考虑这种情况。
示例 2: 使用分页
对于分页跳过和限制,将使用限制和跳过方法以及查找来使用参数。
index.js
// Requiring module
const express = require('express');
const mongoose = require('mongoose');
const port = 3000;
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
// Database URL
const MONGODB_URL = 'mongodb://127.0.0.1/pagination';
// Connecting Database through mongoose(ORM For Mongodb)
mongoose
.connect(MONGODB_URL, {
useCreateIndex: true,
useFindAndModify: false,
useUnifiedTopology: true,
useNewUrlParser: true,
})
.then(() => {
console.log('Database connected');
})
.catch((err) => {
console.log('Error in connecting database');
});
// Creating Schema for Posts, then it will
// be used in creating Model
const PostSchema = new mongoose.Schema({
name: String,
date: {
type: Date,
default: Date.now(),
},
});
const postModel = new mongoose.model('PostModel', PostSchema);
// For creating Posts
app.post('/', async (req, res) => {
const post = new postModel(req.body);
await post.save();
res.status(201).send('Successfully created');
});
// For Fetching Post
app.get('/', async (req, res) => {
try {
// Adding Pagination
const limitValue = req.query.limit || 2;
const skipValue = req.query.skip || 0;
const posts = await postModel.find()
.limit(limitValue).skip(skipValue);
res.status(200).send(posts);
} catch (e) {
console.log(e);
}
});
// Starting the server
app.listen(port, () => {
console.log(`Started at ${port}`);
});
使用以下命令运行服务器:
node index.js
输出:带分页
限制=2 且跳过=0 的分页返回前 2 个文档,
版权属于:月萌API www.moonapi.com,转载请注明出处