Comment créer une pagination de données API à l'aide de Node Express

Image de AIOSEO

Node Express est un framework JavaScript qui peut être utilisé pour développer une variété d'applications Web. Il peut être utilisé pour développer des API Web pouvant être utilisées par diverses applications clientes (application Web ou applications mobiles). La pagination des données doit être implémentée sur les réponses API qui impliquent de longues listes de données. Cet article vous montrera étape par étape comment la pagination des données est implémentée dans les API Node Express.

Cet exemple concerne une application d'actualités.

Étape 1 : Créez un dossier vide appelé newsapp .

$ mkdir newsapp
cd newsapp
$ npm init

$ npm install express --save

$ npm install mongoose --save

const mongoose = require('mongoose')

const mongoose = require('mongoose')
const ArticleSchema = new mongoose.Schema({
   title: { 
    type: String,
    required: true
   },
   content: {
    type: String,
    required: true
 }
})

module.exports = mongoose.model('Article', ArticleSchema)

const mongoose = require('mongoose')
const ArticleSchema = new mongoose.Schema({
   title: { 
    type: String,
    required: true
   },
   content: {
    type: String,
    required: true
 }
})
module.exports = mongoose.model('Article', ArticleSchema)

const express = require('express')
const newsapp = express()
const mongoosedb = require('mongoose')

const article = require('./articles')

mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});

const db = mongoose.connection
db.once('open', async () => {
  if (await article.countDocuments().exec() > 0) return
Promise.all([
article.create({ title: 'article 1', 
                content: "News content for article 1" }),
article.create({ title: 'article 2', 
                content: "News content for article 2" }),
article.create({ title: 'article 3', 
                content: "News content for article 3" }),
article.create({ title: 'article 4', 
                content: "News content for article 4" }),
article.create({ title: 'article 5', 
                content: "News content for article 5" }),
article.create({ title: 'article 6', 
                content: "News content for article 6" }),
article.create({ title: 'article 7', 
                content: "News content for article 7" }),
article.create({ title: 'article 8', 
                content: "News content for article 8" }),
article.create({ title: 'article 9', 
                content: "News content for article 9" }),
article.create({ title: 'article 10', 
                 content: "News content for article 10" }),
article.create({ title: 'article 11', 
                content: "News content for article 11" }),
article.create({ title: 'article 12', 
                content: "News content for article 12" }),
article.create({ title: 'article 13', 
                content: "News content for article 13" })
]).then(() => console.log('Added Articles'))
})

function paginatedNewsArticles(model) {
   return async (request, response, next) => {
     const querypage = parseInt(request.query.page)
     const querylimit = parseInt(request.query.limit)
}}

const firstIndex = (page - 1) * limit
const lastIndex = page * limit
if (firstIndex > 0) {
      paginatedArticlesList.previous = {
      previouspage: page - 1,
      limit: limit
    }
  }
if (lastIndex < await model.countDocuments().exec()) {
      paginatedArticlesList.next = {
       nextpage: page + 1,
       limit: limit
     }
}

const express = require('express')
const newsapp = express()
const mongoosedb = require('mongoose')
const article = require('./articles')
mongoose.connect('mongodb://localhost/pagination', { useNewUrlParser: true, useUnifiedTopology: true })
const db = mongoose.connection
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', async () => {
  if (await article.countDocuments().exec() > 0) return
Promise.all([
   article.create({ title: 'article 1', 
                content: "News content for article 1" }),
   article.create({ title: 'article 2', 
                content: "News content for article 2" }),
   article.create({ title: 'article 3', 
                content: "News content for article 3" }),
   article.create({ title: 'article 4', 
                content: "News content for article 4" }),
   article.create({ title: 'article 5', 
                content: "News content for article 5" }),
   article.create({ title: 'article 6', 
                content: "News content for article 6" }),
   article.create({ title: 'article 7', 
                content: "News content for article 7" }),
   article.create({ title: 'article 8', 
                content: "News content for article 8" }),
   article.create({ title: 'article 9', 
                content: "News content for article 9" }),
   article.create({ title: 'article 10', 
                 content: "News content for article 10" }),
   article.create({ title: 'article 11', 
                content: "News content for article 11" }),
   article.create({ title: 'article 12', 
                content: "News content for article 12" }),
   article.create({ title: 'article 13', 
                content: "News content for article 13" })
]).then(() => console.log('Added Articles'))
})
newsapp.get('/article', paginatedNewsArticles(article), (request, response) => {
response.json(response.paginatedResults)
})
function paginatedNewsArticles(model) {
  return async (request, response, next) => {
    const querypage = parseInt(request.query.page)
    const querylimit = parseInt(request.query.limit)
    const firstIndex = (page - 1) * limit
    const lastIndex = page * limit
    const paginatedArticlesList = {}
   if (firstIndex > 0) {
       paginatedArticlesList.previous = {
       previouspage: page - 1,
       limit: limit
     }
   }
   if (lastIndex < await model.countDocuments().exec()) {
       paginatedArticlesList.next = {
       nextpage: page + 1,
       limit: limit
     }
}
try {
   paginatedArticlesList.results = await
   model.find().limit(limit).skip(firstIndex).exec()
   response.paginatedArticles = paginatedArticlesList
   next()
} catch (e) {
   response.status(500).json({ message: e.message })
}
}}
newsapp.listen(3000)

Et là, nous l'avons. J'espère que vous avez trouvé cela utile. Je reviendrai avec des articles plus intéressants. Merci pour la lecture.

Plus de contenu sur plainenglish.io

Suggested posts

Recherche d'informations sur les noms de domaine

Un extrait de Small, Sharp Software Tools par Brian P. Hogan

Recherche d'informations sur les noms de domaine

Lorsque vous faites une demande à facebook.com, votre ordinateur recherche le nom de domaine pour traduire ce nom de domaine en une adresse IP afin que votre ordinateur puisse établir cette connexion.

La révolution sans code : libérer la prospérité des entreprises avec Webflow, Framer, Bubble.io,

La révolution sans code&nbsp;: libérer la prospérité des entreprises avec Webflow, Framer, Bubble.io,

Embarquez pour un voyage passionnant d'innovation et de succès en exploitant le potentiel inexploité de ces surprenantes plateformes sans code. Permettez-moi de partager avec vous l'histoire de Sapna, une remarquable femme entrepreneure.

Related posts

Ce que vous pouvez faire pendant votre saison d'attente (attendre de décrocher votre premier emploi dans la technologie)

Ce que vous pouvez faire pendant votre saison d'attente (attendre de décrocher votre premier emploi dans la technologie)

Passer à une nouvelle carrière peut être extrêmement difficile si vous essayez de le faire seul. Il est important de trouver des partenaires de responsabilité qui sont au même niveau d'apprentissage que vous, qui partagent des objectifs, une ténacité et un dynamisme similaires.

Deux ans en design - Le bon, le mauvais et le laid…

Deux ans en design - Le bon, le mauvais et le laid…

"Hey Siri, joue Me Dive d'Olivia Dean." C'était en mai 2021 lorsque j'ai commencé mon stage à la Future Academy Africa à Akure, au Nigeria.

Pourquoi certains freelances simulent leur vie

Pourquoi certains freelances simulent leur vie

J'étais récemment sur Linkedin, le plus grand réseau social professionnel au monde, et j'ai trouvé des messages de designers indépendants que je suis et qui ont attiré mon attention. Ils ont tous posté des photos d'avions, sur la plage avec leurs ordinateurs portables, de piscines et de bureaux avec une vue imprenable.

Repenser les médias : les cinq vérités de McChesney et l'avenir des communications

Dans le monde hyper-connecté d'aujourd'hui, les systèmes médiatiques jouent un rôle central dans la formation de l'opinion publique et, par conséquent, dans la prise de décision démocratique. Dans son analyse approfondie de l'économie politique de la communication, le chercheur Robert McChesney remet en question la sagesse conventionnelle et présente ce qu'il appelle les « cinq vérités » sur les médias.