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.
Comments
One response to “Hapijs – Plugins”
At the beginning, I was still puzzled. Since I read your article, I have been very impressed. It has provided a lot of innovative ideas for my thesis related to gate.io. Thank u. But I still have some doubts, can you help me? Thanks.