halifier
A helper toolset for building HAL API with express
Features:
- converts JS objects and arrays of objects to HAL responses
- adds extra conventional field
_listMeta
when returning arrays of objects - provides simple implementation for a controller providing HAL interface to a collection
This is a basis for further concrete implementations such as:
Usage examples
pure AbstractItemHalifier
const {AbstractItemHalifier} = require('halifier')
const data = [
{pass: 'ZK872343', name: 'John', eyeColor: 'blue', weight: 70},
{pass: 'ANK34323', name: 'Marry', eyeColor: 'brown', weight: 65},
{pass: 'LP109929', name: 'T1000', eyeColor: 'red', weight: 128}
]
const app = require('express')()
const peopleHalifier = new AbstractItemHalifier(app, {
idFieldName: 'pass',
baseUrl: '/humans',
name: 'human',
listMeta: {
limit: 2
}
})
app.get('/humans/:pass', (req, res) => {
const found = data.filter(human => human.pass === req.params.pass)
if (found.length) {
peopleHalifier.halifyItem(found[0])
.then(result => res.json(result))
} else {
res.sendStatus(404)
}
})
app.get('/humans', (req, res) => {
const responseProto = peopleHalifier.makeProtoFromReq(req)
responseProto._listMeta.stats = {
total: data.length,
returned: 2
}
peopleHalifier.halifyList(data.slice(2), responseProto)
.then(result => res.json(result))
})
app.listen(3000)