hapi-crud-promise
Basics
Reduce repetitive route setup for basic CRUD apps.
Provide one route and a 5 handlers:
/api/things/{thingId}
And get 5 routes added to your server:
GET /api/things
POST /api/things
GET /api/things/{thingId}
PUT /api/things/{thingId}
DELETE /api/things/{thingId}
Simple Usage
const Hapi = require('hapi');
const Joi = require('joi');
const hapiCrudPromise = require('../index');
const server = new Hapi.Server();
server.connection({ host: '127.0.0.1' });
hapiCrudPromise(server, {
path: '/api/things/{thingId}',
config: {
validate: {
query: {
limit: Joi.number().optional()
}
params: {
thingId: Joi.string().required()
},
payload: Joi.object({
thing: Joi.object({
name: Joi.string().required()
}).required()
})
}
},
crudRead(req) {
return knex('things')
.first()
.where({ id: req.params.thingId });
},
crudReadAll(req) {
return knex('things').limit(req.query.limit);
},
crudUpdate(req) {
return knex('things')
.update(req.payload.thing)
.where({ id: req.params.thingId })
.limit(1)
.returning('*')
.spread((thing) => ({ thing: thing }));
},
crudCreate(req) {
return knex('things')
.insert(req.payload.thing)
.returning('*')
.spread((thing) => ({ thing: thing }));
},
crudDelete(req) {
return knex('things')
.delete()
.where({ id: req.params.thingId })
.limit(1);
}
});
Contributing
Contributors wanted. If you are looking for a way to help out browse the Help Wanted issues and find one that looks good to you. If you have an idea to make hap-crud-promise better submit a pull request.
Pull Request Checklist
Checklist for submitting a pull request:
FAQ
Yeah, but with Promises! And active. And the Github repo is still live.
Can't I just create a bunch of routes manually?
CRUD routes are repetitive. Write less code and go outside.