Creé una API básica para mi proyecto usando node y express. Quería agregar información de paginación a los datos, como límite, tamaño de datos, página, etc.
Me las arreglé para hacer esto, pero tengo un error que no puedo arreglar. Cuando cargo la API en el navegador y presiono actualizar, me mostrará el siguiente conjunto de objetos (ya que el límite es 10), si presiono actualizar nuevamente, los resultados están vacíos.
{"collectionSize":29,"numOfPages":3,"results":[]}
¿Es este comportamiento normal?
Aplicación.js
import express from 'express' import cors from 'cors' import indexRouter from './routes/indexRouter.js' const app = express() const port = process.env.PORT || 4041 app.use(express.urlencoded({ extended: false })) app.use(express.json()) app.use(cors()) // <---- use cors middleware app.use('/', indexRouter) app.listen(port, () => { console.log(`server is running on port: ${port}`) })
Enrutador.js
import express from 'express'; import projectData from "../mocks/data.js"; const router = express.Router(); const projects = projectData; router.get("/api/projects", paginate(projects), (req, res) => { const { paginatedResult } = res; res.json( paginatedResult ); }); const config = { startingPage: 1, limitDefault: 10, modelSize: projects.length, } function paginate(model) { return async (req, res, next) => { const page = parseInt(req.query.page) || config.startingPage; const limit = parseInt(req.query.limit) || config.limitDefault; const startIndex = (page - 1) * limit; const endIndex = page * limit; const numOfPages = Math.round(config.modelSize / limit); const result = {}; if (endIndex < model.length) { result.next = { page: page + 1, limit: limit, }; } if (startIndex > 0) { result.previous = { page: page - 1, limit: limit, }; } try { result['collectionSize'] = config.modelSize; result['numOfPages'] = numOfPages; result.results = model.splice(startIndex, endIndex); res.paginatedResult = result; return next(); } catch (e) { res.status(500).json({ message: e.message }); } }; }