Soy nuevo en Node y Express. Actualmente estoy agregando una función de paginación a mi API. La mayor parte del trabajo duro está hecho hasta ahora, pero no puedo hacer que funcione ya que he refactorizado y hecho que la paginación sea una función.
Aquí está mi ruta:
const projects = require('../controllers/project.controller'); module.exports = (app) => { var router = require('express').Router(); // Retrieve all project router.get('/', projects.findAll); };Aquí está el software intermedio:
const paginatedResults = (model) => { return (req, res, next) => { const page = parseInt(req.query.page); const limit = parseInt(req.query.limit); const startIndex = (page - 1) * limit; const endIndex = page * limit; const results = {}; if (endIndex < model.length) { results.next = { page: page + 1, limit: limit, }; } if (startIndex > 0) { results.previous = { page: page - 1, limit: limit, }; } results.results = model.slice(startIndex, endIndex); res.paginatedResults = results; next(); }; }; const pagination = { paginatedResults, }; module.exports = pagination;Aquí está mi controlador:
exports.findAll = (req, res) => { Project.find({}, (err, data) => { res.send(data); }); }; Me pregunto si hay algo que deba cambiar dentro de la función. Idealmente, me gustaría poder usar en la ruta (por ejemplo router.get('/', [pagination.paginatedResults(Projects), projects.findAll]) )
los middlewares funcionan uno por uno. Intenta paginar cuando no tiene resultados para paginar. Si está de acuerdo con el uso de la función de ayuda, intente algo como esto.
//route const projects = require('../controllers/project.controller'); module.exports = (app) => { var router = require('express').Router(); // Retrieve all project router.get('/', projects.findAll); }; // controller exports.findAll = (req, res) => { const mongoQuery = Project.find(); const result = await paginateQuery(mongoQuery, req.query.page, req.query.limit); res.send(result) }; // helper const paginateQuery =async (mongoQuery, page, limit) => { const skip = page-1 const results =await mongoQuery.skip(skip).limit(limt) // transform results the way you want and/or build response object return results };