Hapijs – Plugins

hapi has dozens of plugin system. like ,

Authentication, Documentation, Localization/Internationalization, Logging/Metrics, Messaging, Security, Session, Templating, Utility, Validation….

– you can write your own plugin.
– plugins are objects with a register function, and has a signature function (server, options, next).
– register function has an attributes object.
– this object provides some additional information about the plugin, such as name and version.

let’s see an example

[cc lang=”‘javascript”]

var pluginName = {
register: function (server, options, next) {
next();
}
};
pluginName.register.attributes = { 7 name: ‘pluginName’,
version: ‘1.0.0’
};

[/cc]
– In register methods, three parameters pass
– server object is a reference to that is being loaded in server.
– The options parameter whatever options the user passes it is passed directly to your register method.
– next method called when your plugin has completed. This method accepts only one parameter, err, if an error occurred while registering of.
– and if when you written plugin as an external module:

[cc lang=”‘javascript”]
exports.register = function (server, options, next) {
next();
};
exports.register.attributes = {
pkg: require(‘./package.json’)
};
[/cc]

Loading a plugin

– Plugins can be loaded using “server.register()“ method,
– one at a time, or as a group in an array. for example ,

[cc lang=”‘javascript”]
// load one plugin server.register(require(‘pluginName’), function (err) { if (err) { console.error(‘Failed to load plugin:’, err); } });

// load multiple plugins server.register([require(‘pluginName1’), require(‘pluginName2’)], function (err) { if (err) { console.error(‘Failed to load a plugins :’, err); } });
[/cc]

you can pass options to your plugin, with register and options keys, such as:

[cc lang=”‘javascript”]
server.register({
register: require(‘pluginName’),
options: {
message: ‘hello’
}
}, function (err) {
});
[/cc]

Or you can pass object using array also.
[cc lang=”‘javascript”]
server.register([{
register: require(‘plugin1’),
options: {}
}, {
register: require(‘plugin2’),
options: {}
}], function (err) {
});
[/cc]

plugins options

-if You want to pass an optional parameter to server.register() you can pass it, before the callback.
– These options object is used by hapi.
– and is not passed to the plugin(s) being loaded.
– It allows you to pre-select servers based on one or more labels,
– as well as apply vhost or prefix modifiers to any routes that your plugins register.

For example, let’s say we have a plugin that looks like this:

[cc lang=”‘javascript”]
exports.register = function (server, options, next) {
server.route({
method: ‘GET’,
path: ‘xyz’,
handler: function (request, reply) {
reply(‘run’);
}
});
next();
};
exports.register.attributes = {
pkg: require(‘./package.json’)
};
[/cc]
When this plugin is loaded a new route is created at /xyz. You can changed this by using option’s prefix setting, which will prepend a string to all routes created in the plugin:

[cc lang=”‘javascript”]
server.register({ register: require(‘pluginName’) }, {
routes: {
prefix: ‘/plugins’
}
}, function (err) {
});
[/cc]

When the plugin is load completly, the GET route will be created at /plugins/Name.

The select parameter works exactly the same way as server.select() does, in that you may pass one label or an array of labels for the plugin to be associated with.

[cc lang=”‘javascript”]

server.register({ register: require(‘pluginName’) }, {
select: [‘webserver’, ‘admin’]
}, function (err) {
});

[/cc]

This allows you to attach a plugin to specific connections in a server without having to change the code of the plugin.


Posted

in

, , ,

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *