.initialize(cb)
The initialize
feature allows a hook to perform startup tasks that may be asynchronous or rely on other hooks. All Sails configuration is guaranteed to be completed before a hook’s initialize
function runs. Examples of tasks that you may want to put in initialize
are:
Like all hook features, initialize
is optional and can be left out of your hook definition. If implemented, initialize
takes one argument: a callback function which must be called in order for Sails to finish loading:
initialize: function(cb) {
// Do some stuff here to initialize hook
// And then call `cb` to continue
return cb();
}
By default, hooks have ten seconds to complete their initialize
function and call cb
before Sails throws an error. That timeout can be configured by setting the _hookTimeout
key to the number of milliseconds that Sails should wait. This can be done in the hook’s defaults
:
defaults: {
__configKey__: {
_hookTimeout: 20000 // wait 20 seconds before timing out
}
}
When a hook successfully initializes, it emits an event with the following name:
hook:<hook name>:loaded
For example:
orm
hook emits hook:orm:loaded
after its initialization is complete.node_modules/sails-hook-foo
emits hook:foo:loaded
by defaultsails-hook-foo
hook, with sails.config.installedHooks['sails-hook-foo'].name
set to bar
would emit hook:bar:loaded
node_modules/mygreathook
would emit hook:mygreathook:loaded
api/hooks/mygreathook
would also emit hook:mygreathook:loaded
You can use the "hook loaded" events to make one hook dependent on another. To do so, simply wrap your hook’s initialize
logic in a call to sails.on()
. For example, to make your hook wait for the orm
hook to load, you could make your initialize
similar to the following:
initialize: function(cb) {
sails.on('hook:orm:loaded', function() {
// Finish initializing custom hook
// Then call cb()
return cb();
});
}
To make a hook dependent on several others, gather the event names to wait for into an array and call sails.after
:
initialize: function(cb) {
var eventsToWaitFor = ['hook:orm:loaded', 'hook:mygreathook:loaded'];
sails.after(eventsToWaitFor, function() {
// Finish initializing custom hook
// Then call cb()
return cb();
});
}