如何使用skip和limit在Node.js中创建分页

如何使用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 

项目结构:

将会如下所示

如何使用skip和limit在Node.js中创建分页

示例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插入的,具体方法如下:

如何使用skip和limit在Node.js中创建分页

输出: 不使用分页

如何使用skip和limit在Node.js中创建分页

如上面的示例所示,如果没有分页,将会获取所有文档。为了更清楚地了解分页的使用和需求,请思考这样一个情况,当文档的数量达到数千个而不仅仅是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

输出: 使用分页功能

如何使用skip和limit在Node.js中创建分页

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程