Last active
April 19, 2018 09:39
-
-
Save capJavert/fbbad572000e36e715fe102594508c0c to your computer and use it in GitHub Desktop.
Custom json server using https://github.com/typicode/json-server and enables custom pk assignment for resources.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const jsonServer = require('json-server'); | |
const server = jsonServer.create(); | |
const path = require('path'); | |
const router = jsonServer.router(path.join(__dirname, 'db.json')); | |
const middlewares = jsonServer.defaults(); | |
// define primary key columns for each resource | |
const primaryKeys = { | |
"countries": "code", | |
"towns": "id", | |
"access-policies": "accessPolicyId", | |
"device-services": "id" | |
}; | |
const port = 3200; | |
server.use(middlewares); | |
server.use(router); | |
server.listen(port, () => { | |
console.log('Test server is running on port: ' + port) | |
}); | |
router.render = (req, res) => { | |
const resource = req.path.split('/')[1]; | |
let filteredResponse = res.locals.data; | |
// remapping internal id columns to dedicated resource columns | |
if (req.method === 'POST' || req.method === 'PUT') { | |
req.body.id = req.body[primaryKeys[resource]]; | |
} else if (req.method === 'GET') { | |
filteredResponse = filterResponse(resource, res.locals.data); | |
} | |
// optional response wrapping to data attribute | |
res.jsonp({ | |
data: filteredResponse | |
}); | |
}; | |
function filterResponse(resource, response) { | |
// don't filter if primaryKey is same as internal | |
if (primaryKeys[resource] === 'id') { | |
return response; | |
} | |
if (response instanceof Array) { | |
for (let i=0;i<response.length;i++) { | |
delete response[i].id; | |
} | |
} else { | |
delete response.id; | |
} | |
return response; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment