如何使用skip和limit在Node.js中创建分页
Node.js是一个开源的、跨平台的运行时环境,用于在浏览器之外执行JavaScript代码。它被广泛用于开发从小公司到大公司的API和微服务。这是一个很好的工具,因为它使开发人员能够在服务器端和客户端都使用JavaScript。
什么是分页?
分页是一个非常有用的方法。它允许客户端以页面的形式获取数据。通过使用skip和limit选项实现,使客户端完全控制他们获取的页面数据。
先决条件:
具备基本的Node.js和Mongodb知识。
何时使用分页?
根据其描述,分页应该在以下情况下使用:
- 当客户端需要对获取的数据有控制权时。
- 改善用户体验(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
插入到数据库: 数据是通过Postman插入的,具体方法如下:
输出: 不使用分页
如上面的示例所示,如果没有分页,将会获取所有文档。为了更清楚地了解分页的使用和需求,请思考这样一个情况,当文档的数量达到数千个而不仅仅是4个时。
示例2: 使用分页
对于分页的跳过(skip)和限制(limit)参数,将会使用limit和skip方法以及find方法。
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
输出: 使用分页功能