Cómo construir paginación de datos API usando Node Express

Imagen de AIOSEO

Node Express es un marco de JavaScript que se puede utilizar para desarrollar una variedad de aplicaciones web. Se puede utilizar para desarrollar API web que pueden ser consumidas por varias aplicaciones cliente (aplicación web o aplicaciones móviles). La paginación de datos debe implementarse en respuestas de API que involucran largas listas de datos. Este artículo le mostrará paso a paso cómo se implementa la paginación de datos en las API de Node Express.

Este ejemplo será sobre una aplicación de noticias.

Paso 1: crea una carpeta vacía llamada 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)

Y ahí lo tenemos. Espero que te haya resultado útil. Volveré con artículos más interesantes. Gracias por leer.

Más contenido en plainenglish.io

Suggested posts

Búsqueda de información sobre nombres de dominio

Un extracto de Small, Sharp Software Tools de Brian P. Hogan

Búsqueda de información sobre nombres de dominio

Cuando realiza una solicitud a facebook.com, su computadora busca el nombre de dominio para traducir ese nombre de dominio en una dirección IP para que su computadora pueda hacer esa conexión.

La revolución sin código: liberando la prosperidad empresarial con Webflow, Framer, Bubble.io,

La revolución sin código: liberando la prosperidad empresarial con Webflow, Framer, Bubble.io,

Embárcate en un emocionante viaje de innovación y éxito mientras aprovechas el potencial sin explotar de estas sorprendentes plataformas sin código. Permítame compartir con usted una historia sobre Sapna, una notable mujer empresaria.

Related posts

Recopilación de OSINT para la caza de amenazas

Recopilación de OSINT para la caza de amenazas

¡Hola, entusiastas cibernéticos! Bienvenido de nuevo a la serie OSINT para la caza de amenazas. En el primer artículo, le di una descripción general de OSINT y su importancia en la caza de amenazas.

¿Es el arte alguna vez apolítico?

¿Es el arte alguna vez apolítico?

Ayer cerramos la puerta del Festival de la Canción de Eurovisión de este año con una gran final brillante y caótica en la que la cantante sueca Loreen se llevó a casa el trofeo, convirtiéndose en la primera mujer en ganar dos veces y devolviendo la corona a Suecia 50 años después de que ABBA ganara la competencia. con “Waterloo”. Se convirtieron en uno de los actos más grandes en el canon de la música pop.

La revolución del lugar de trabajo: los mejores expertos hablan sobre el trabajo híbrido y remoto

La revolución del lugar de trabajo: los mejores expertos hablan sobre el trabajo híbrido y remoto

En el panorama empresarial en rápida evolución actual, el concepto de trabajo híbrido y remoto ha ganado un impulso sin precedentes. A medida que las empresas continúan adaptándose a las necesidades y expectativas cambiantes de sus empleados, expertos de varios campos se han reunido para analizar los beneficios, los desafíos y el futuro de esta forma transformadora de trabajar.

La semana de aprendizaje en el trabajo es más importante de lo que piensas

La semana de aprendizaje en el trabajo es más importante de lo que piensas

A menudo nos encontramos luchando para implementar lo que sabemos que es bueno para nosotros. Desde decirle a un ser querido que lo amamos hasta recordar hablar como un pirata, siempre habrá quienes digan que no hace falta un día, una semana o un mes de eventos porque ya están haciendo esas cosas.