Skip to content

Instantly share code, notes, and snippets.

@jmorenoamor
Created March 29, 2020 07:37
Show Gist options
  • Save jmorenoamor/7536fb2cee8888ad551b8d27bd1ed84f to your computer and use it in GitHub Desktop.
Save jmorenoamor/7536fb2cee8888ad551b8d27bd1ed84f to your computer and use it in GitHub Desktop.
Customize the json-server response to match the Django REST Framework pagination style
/**
* Customize the json-server response to match the Django REST Framework pagination style.
*
* @author Jesús Moreno Amor <[email protected]>.
* @version 1.0.0
*/
const jsonServer = require('json-server')
const server = jsonServer.create()
const router = jsonServer.router('projects.json')
const middlewares = jsonServer.defaults()
server.use(middlewares)
server.use(router)
server.listen(3000, () => {
console.log('JSON Server is running')
})
function parseLinksHeader(header) {
if (header && header.length) {
return header.split(',').reduce((obj, item) => {
let key = item.split(';')[1].replace(/rel="(.*)"/, '$1').trim();
let value = item.split(';')[0].replace(/<(.*)>/, '$1').trim();
obj[key] = value;
return obj
}, {});
}
return {};
}
router.render = (request, response) => {
let paginationHeader = response.getHeaders().link;
let paginationLinks = parseLinksHeader(paginationHeader);
response.jsonp({
"count": response.getHeaders()["x-total-count"],
"next": paginationLinks.next,
"previous": paginationLinks.prev,
"results": response.locals.data
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment