mirror of
https://github.com/typicode/json-server.git
synced 2025-07-31 06:01:50 +08:00
Update pagination (#346)
This commit is contained in:
@ -32,6 +32,10 @@ module.exports = function (db, name) {
|
||||
})
|
||||
}
|
||||
|
||||
function getFullURL (req) {
|
||||
return req.protocol + '://' + req.get('host') + req.originalUrl
|
||||
}
|
||||
|
||||
// GET /name
|
||||
// GET /name?q=
|
||||
// GET /name?attr=&attr=
|
||||
@ -156,8 +160,28 @@ module.exports = function (db, name) {
|
||||
_page = parseInt(_page, 10)
|
||||
_page = _page >= 1 ? _page : 1
|
||||
_limit = parseInt(_limit, 10) || 10
|
||||
_start = (_page - 1) * _limit
|
||||
chain = chain.slice(_start, _start + _limit)
|
||||
var page = utils.getPage(chain.value(), _page, _limit)
|
||||
var links = {}
|
||||
var fullURL = getFullURL(req)
|
||||
|
||||
if (page.first) {
|
||||
links.first = fullURL.replace('page=' + page.current, 'page=' + page.first)
|
||||
}
|
||||
|
||||
if (page.prev) {
|
||||
links.prev = fullURL.replace('page=' + page.current, 'page=' + page.prev)
|
||||
}
|
||||
|
||||
if (page.next) {
|
||||
links.next = fullURL.replace('page=' + page.current, 'page=' + page.next)
|
||||
}
|
||||
|
||||
if (page.last) {
|
||||
links.last = fullURL.replace('page=' + page.current, 'page=' + page.last)
|
||||
}
|
||||
|
||||
res.links(links)
|
||||
chain = _.chain(page.items)
|
||||
} else if (_end) {
|
||||
_start = parseInt(_start, 10) || 0
|
||||
_end = parseInt(_end, 10)
|
||||
|
@ -1,5 +1,6 @@
|
||||
module.exports = {
|
||||
toNative: toNative
|
||||
toNative: toNative,
|
||||
getPage: getPage
|
||||
}
|
||||
|
||||
// Turns string to native.
|
||||
@ -22,3 +23,30 @@ function toNative (value) {
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
function getPage (array, page, perPage) {
|
||||
var obj = {}
|
||||
var start = (page - 1) * perPage
|
||||
var end = page * perPage
|
||||
|
||||
obj.items = array.slice(start, end)
|
||||
if (obj.items.length === 0) {
|
||||
return obj
|
||||
}
|
||||
|
||||
if (page > 1) {
|
||||
obj.prev = page - 1
|
||||
}
|
||||
|
||||
if (end < array.length) {
|
||||
obj.next = page + 1
|
||||
}
|
||||
|
||||
if (obj.items.length !== array.length) {
|
||||
obj.current = page
|
||||
obj.first = 1
|
||||
obj.last = Math.ceil(array.length / perPage)
|
||||
}
|
||||
|
||||
return obj
|
||||
}
|
Reference in New Issue
Block a user