module.exports = (table, _max_limits) => {
// global variable
let queryString = `select * from ${table}`
let arr = []
let results = {}
find(queryString)
.then((data) => arr = data)
.catch(err => res.status(400).json({ err }))
return (req, res, next) => {
// like convention
const { page, limit } = req.query
// user input
const intPage = parseInt(page, 10) || 1
const intLimit = parseInt(limit, 10)
// control user limit
const intCtrLimit = intLimit > _max_limits ? _max_limits : intLimit // user limit > _max_limits
// algorithms
let totals = arr.length
let numberOfPages = Math.round(((totals) / intCtrLimit))
let startIndex = (intPage - 1) * intCtrLimit
let endIndex = ((intPage * intCtrLimit) - 1)
// output
let prevPage = (intPage > 0 && intPage <= numberOfPages) ? intPage - 1 : 1
let nexPage = (intPage < numberOfPages) ? intPage + 1 : numberOfPages // not equals but is add one
// errors gestion
if (intPage <= numberOfPages) {
if (intPage > 0) {
results = {
log: `result of request : page=${intPage} & limit=${intCtrLimit} `,
totals,
prevPage,
nexPage,
numberOfPages,
limit: intCtrLimit,
startIndex,
endIndex: endIndex + 1 // like array slice
}
}
}
// like user paigination
let paginateDatas = arr.slice(results?.startIndex, results?.endIndex)
results.datas = paginateDatas
// like middleware principe
req.paginateResults = results
next()
}
}
For further actions, you may consider blocking this person and/or reporting abuse
Top comments (0)