Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ulisesgascon/express-simple-pagination
Express middleware for simple pagination. Easy way to handle limit and offset
https://github.com/ulisesgascon/express-simple-pagination
Last synced: 2 days ago
JSON representation
Express middleware for simple pagination. Easy way to handle limit and offset
- Host: GitHub
- URL: https://github.com/ulisesgascon/express-simple-pagination
- Owner: UlisesGascon
- License: mit
- Created: 2020-03-16T08:53:54.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-01-08T14:14:37.000Z (over 1 year ago)
- Last Synced: 2024-09-13T12:14:12.533Z (22 days ago)
- Language: JavaScript
- Size: 1.38 MB
- Stars: 13
- Watchers: 3
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
express-simple-pagination
Express middleware for simple pagination. Easy way to handle limit and offset# About
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:
- The default values for pagination.
- The current pagination request.
- If the pagination is active.
- Default values, Range validation, wrong values validation and sanitization.
- By default the offset will be 0 and the limit range between (20-500)
- Full customizable
- Easy to use and 100% test coverage```txt
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`# Usage
## Install
```bash
npm install express-simple-pagination
```## Simple Usage (Enable All Pagination Requests)
```js
const express = require('express')
const pagination = require('express-simple-pagination')
const app = express()
const port = 3000app.use(pagination())
app.get('/products', (req, res, next) => {
res.json({msg: req.pagination})
})app.listen(port, () => {
console.log(`web server listening on ${port}`)
})
```output:
```txt
/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 }}
```## Enable pagination for a Single Route
```js
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:
```txt
/products
└──> msg: {req.isEnable: false, default: { limit: 20, offset: 0 }}/clients
└──> msg: undefined
```## Configuring Pagination (items per page)
```js
const express = require('express')
const pagination = require('express-simple-pagination')
const app = express()
const port = 3000const 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:
```txt
/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 }}
```## Page vs Offset
It is possible to use `page` argument like `?page=1` in state of `offset`
# Test
You can run them:
```bash
npm run test:coverage
```# Contributing
Please check [CONTRIBUTING](./CONTRIBUTING.md) for guidelines on contributing to this project.
# Author
**express-simple-pagination** © [Ulises Gascón](https://github.com/ulisesgascon), Released under the [MIT](./LICENSE) License.