0.1.4 • Published 6 years ago

hapify v0.1.4

Weekly downloads
1
License
MIT
Repository
github
Last release
6 years ago

Hapify

Do you like Hapi Routing format, Joi validation and Boom error objects but you don't want to leave Express and it's middlewares echosystem! For the same reasons I creted this library.

Usage Example

const Express = require('express');
const BodyParser = require('body-parser');
const Errorhandler = require('errorhandler');

const Hapify = require('hapify');
const Joi = require('joi');
const Boom = require('boom');


/**
 * Create Express server.
 */
const app = Express();
app.use(Errorhandler())
app.use(BodyParser.json());
app.use(BodyParser.urlencoded({ extended: true }));

/**
 * Create Hapify instance, settings are optional 
 * in case you want to transform boom response
 * or you want to change Joi settings
 */
const hapify = new Hapify(app, {
    boom: {
        transform: function (payload) {
            return { error: payload };
        }
    }
});


/**
 * Add Hapi like routes using hapify instance
 */
hapify.addRoute({
    method: 'GET',
    path: '/success',
    config: {
        handler: function (req, res) {
            res.json({ status: 'success' });
        }
    }
});

/**
 * res.boom is a function that receives Boom object
 */
hapify.addRoute({
    method: 'GET',
    path: '/boom',
    config: {
        handler: function (req, res) {
            res.boom(Boom.badRequest('I am boom response'));
        }
    }
});


/**
 * Joi validation
 */
hapify.addRoute({
    method: 'POST',
    path: '/validate/:homeId/profile/:profileId',
    config: {
        validate: {
            params: {
                homeId: Joi.string().required(),
                profileId: Joi.string().optional()
            },
            body: {
                name: Joi.string().required()
            }
        },
        handler: function (req, res) {
            const data = {
                params : req.params,
                body: req.body
            };

            res.json(data);
        }
    }
});

/**
 * Express middlewares 
 */
const isAuthenticated = function(req, res, next) {
    const token = req.get('authorization');

    if (!token) {
        return res.boom(Boom.unauthorized('Authorization param missing'));
    }

    next();
}


/**
 * Joi validation
 */
hapify.addRoute({
    method: 'GET',
    path: '/auth',
    config: {
        middleware: isAuthenticated,
        handler: function (req, res) {
            
            res.json({status: 'You are authorzed'});
        }
    }
});



/**
 * Start Express server.
 */
const server = app.listen(3000, function () {
    const port = server.address().port;
    console.log('App listening at %s', port);
});
0.1.4

6 years ago

0.1.3

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago