import jsonServer from 'json-server'; const server = jsonServer.create(); const router = jsonServer.router('api.json'); const middlewares = jsonServer.defaults(); server.use(middlewares); server.use( jsonServer.rewriter({ '/api/*': '/$1', '*sort=services*': '$1sort=services[0].name$2', '*sort=organizations*': '$1sort=organizations[0].address.city$2', '*sort=fullName*': '$1sort=firstName,lastName$2', '/employee*': '/employees$1', '/participants': '/participants?_embed=employees', '/participant/:id': '/participants/:id?_embed=employees', '*page=*': '$1_page=$2', '*limit=*': '$1_limit=$2', '*sort=*': '$1_sort=$2', '*order=*': '$1_order=$2', }) ); router.render = (req, res) => { const params = new URLSearchParams(req._parsedUrl.query); // Add createdAt to the body if (req.originalMethod === 'POST') { req.body.createdAt = Date.now(); } res.jsonp({ data: res.locals.data, ...appendMetaData(params, res), }); }; server.use(router); server.listen(8000, () => { console.info('JSON Server is running'); }); function appendMetaData(params, res) { if (params.has('_page')) { const limit = +params.get('_limit'); const page = +params.get('_page'); const count = res.get('X-Total-Count'); const totalPages = Math.ceil(count / limit); return { meta: { count, limit, page, totalPages, }, }; } return null; }