Hapi.js is fun
Jowanza Joseph
@jowanza
Agenda
- State of Node.js Web Frameworks
- Why I Chose Hapi
- Making a Web App With Hapi.js
- The Hapi.js Ecosystem
The Spectrum
MVC*
Less Convention
Conventions are good
Freedom helps you learn
The Hapi Philosophy
Configuration vs. Code
Code
The Express.js Way
var express = require('express');
var Item = require('models').Item;
var app = express();
var itemRoute = express.Router();
itemRoute.param('itemId', function(req, res, next, id) {
Item.findById(req.params.itemId, function(err, item) {
req.item = item;
next();
});
});
// Create new Items
itemRoute.post('/', function(req, res, next) {
var item = new Item(req.body);
item.save(function(err, item) {
res.json(item);
});
});
itemRoute.route('/:itemId')
// Get Item by Id
.get(function(req, res, next) {
res.json(req.item);
})
// Update an Item with a given Id
.put(function(req, res, next) {
req.item.set(req.body);
req.item.save(function(err, item) {
res.json(item);
});
})
// Delete and Item by Id
.delete(function(req, res, next) {
req.item.remove(function(err) {
res.json({});
});
});
app.use('/api/items', itemRoute);
app.listen(8080);
Problems
- Repetition
- Dependency on Middleware
- Reasoning
The Loopback Way
var loopback = require('loopback');
var app = module.exports = loopback();
var Item = loopback.createModel(
'Item',
{
description: 'string',
completed: 'boolean'
}
);
app.model(Item);
app.use('/api', loopback.rest());
app.listen(8080);
Problems
- Too OOP
- Magic
Hapi: Step-by-step
Hapi Ecosystem
Lets try some
Take Aways
- Give Hapi a try
- Use Hapi Ecosystem tools for testing
- Use Hapi!
Questions?
Hapi.js: My Personal Joy(i)
By Jowanza Joseph
Hapi.js: My Personal Joy(i)
Why I use Hapi.js
- 2,595