Express middleware for simple pagination. Easy way to handle limit and offset
MIT License
Express middleware for simple pagination. Easy way to handle limit and offset.
The pagination middleware will add an object pagination
to request
.
By default it includes:
req.pagination = {
isEnable: Boolean(), // This indicates if the pagination was requested in the url
default: { limit: 20, offset: 0 }, // default values
current: { limit: 20, offset: 0 } // In case that the pagination was requested, this estimates the real pagination using ranges and default values.
}
This middelware will be triggered by query params offset
and/or limit
, like:
/route?limit=10
/route?limit=100&offset=500
/route?offset=350
npm install express-simple-pagination
const express = require('express')
const pagination = require('express-simple-pagination')
const app = express()
const port = 3000
app.use(pagination())
app.get('/products', (req, res, next) => {
res.json({msg: req.pagination})
})
app.listen(port, () => {
console.log(`web server listening on ${port}`)
})
output:
/products
└──> msg: {req.isEnable: false, default: { limit: 20, offset: 0 }}
/products?limit=200
└──> msg: {req.isEnable: false, current: { limit: 200, offset: 0 }, default: { limit: 20, offset: 0 }}
/products?limit=200&offset=600
└──> msg: {req.isEnable: false, current: { limit: 200, offset: 600 }, default: { limit: 20, offset: 0 }}
/products?limit=4000
└──> msg: {req.isEnable: false, current: { limit: 200, offset: 0 }, default: { limit: 20, offset: 0 }}
/products?limit=-10
└──> msg: {req.isEnable: false, current: { limit: 20, offset: 0 }, default: { limit: 20, offset: 0 }}
/products?offset=-10
└──> msg: {req.isEnable: false, current: { limit: 20, offset: 0 }, default: { limit: 20, offset: 0 }}
const express = require('express')
const pagination = require('express-simple-pagination')
const app = express()
const port = 3000
app.get('/products', pagination(), (req, res, next) => {
res.json({msg: req.pagination})
})
app.get('/clients', (req, res, next) => {
res.json({msg: req.pagination})
})
app.listen(port, () => {
console.log(`web server listening on ${port}`)
})
output:
/products
└──> msg: {req.isEnable: false, default: { limit: 20, offset: 0 }}
/clients
└──> msg: undefined
const express = require('express')
const pagination = require('express-simple-pagination')
const app = express()
const port = 3000
const paginationOptions = {
min: 5,
max: 1000
}
app.get('/products', pagination(paginationOptions), (req, res, next) => {
res.json({msg: req.pagination})
})
app.listen(port, () => {
console.log(`web server listening on ${port}`)
})
output:
/products
└──> msg: {req.isEnable: false, default: { limit: 5, offset: 0 }}
/products?limit=1
└──> msg: {req.isEnable: false, current: { limit: 5, offset: 0 }, default: { limit: 5, offset: 0 }}
/products?limit=2400000&offset=600
└──> msg: {req.isEnable: false, current: { limit: 1000, offset: 600 }, default: { limit: 5, offset: 0 }}
/products?limit=4000
└──> msg: {req.isEnable: false, current: { limit: 4000, offset: 0 }, default: { limit: 5, offset: 0 }}
It is possible to use page
argument like ?page=1
in state of offset
You can run them:
npm run test:coverage
Please check CONTRIBUTING for guidelines on contributing to this project.
express-simple-pagination © Ulises Gascón, Released under the MIT License.