Scan and register automatically your hapi methods
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test
.gitignore
.travis.yml
LICENSE
README.md
index.js
package.json

README.md

hapi-methods-injection

Scan and register automatically your hapi methods

npm version Build Status Coverage Status Dev Dependencies

You can use this plugin to scan specified directories and register all found functions as hapi methods.

Support

  • Hapi >= 10 - Use version 1.x

Usage

###1. Installation :

npm install --save hapi-methods-injection

###2. Plugin configuration :

 server.register({
  register: require('hapi-methods-injection'),
  options: {
        relativeTo: __dirname,
        methods: [{
            prefix: 'services',
            path: './server/api/services'
        },
        {
            prefix: 'models',
            path: './server/api/models'
        }]
    }
}, function(err) {
  ...
});

###3. Methods examples :

assume that we have multiple services in /server/api/services folder like :

  • UserService.js :
'use strict';
module.export.createOrUpdate = function(user, next) {
	// call models and do some logic
	...
	next(null, userFromDb);
};

createOrUpdate function will be registred by hapi-methods-injection plugin as Hapi method and can be accessed using :

server.methods.services.UserService.createOrUpdate(user, function(err, data){
	...
});

###4. How to call a method inside another existing method :

assume that we have a Model file User.js in /server/api/models folder defined as :

  • User.js :
'use strict';
// database dependency here
module.exports.get = function (id, next) {
	// logic to get an existing user
	next(null, user);
};
module.exports.create = function (user, next) {
	// logic to insert new user
	next(null, createdUser);
};
module.exports.update = function (user, next) {
	// logic to update a user
	next(null, updatedUser);
};

Calling models.User methods inside UserService :

  • UserService.js :
'use strict';
const context = require('hapi-methods-injection');
module.export.createOrUpdate = function(user, next) {
	const User = context.methods.models.User;
	User.get(user.id, function(err, userFound){
		if(err) return next(err);
		if(userFound) {
			// assume that merge method is already declared.
			const mergedUser = merge(user, userFound);
			User.update(mergedUser, function(err, updatedUser){
				if(err) return next(err);
				return next(updatedUser);
			});
		 } else{
			 User.create(user, function(err, createdUser){
				if(err) return next(err);
				return next(createdUser);
			 });
		 }
	});
};

###5. Declaring Hapi options for a specific method :

Adding cache capability to User.get(id, next) :

  • User.js :
module.exports.get = {
    options: {
        cache: {
            expiresIn: 60000,
            generateTimeout: 60000
        }
    },
    method: function (id, next) {
	// logic to get an existing user
	next(null, user);
    }
};
...