3.4 KiB
loopback-connector-hooks(3) - Hooks and object lifecycle.
DESCRIPTION
Hook is a class method called on object when some event happens. List of events:
-
initialize
: Called afternew Model
called. -
create
: Called before and after create. -
update
: Called before and after save (except create). -
save
: Called before and after save (including both create and update). -
validate
: Called before and after validations. -
destroy
: Called before and after destroy on instance.
Each hook except initialize
accepts callback as the first argument. This callback
should be called when hook is done. All hooks are called on object instance, but it's
not recommended to use this
for updating all hooks where data argument is
available (second argument for all data-related before-hooks: save, update,
create).
INITIALIZE
Initialize hook called when new object created after all setters and defaults being applied.
Model.afterInitialize = function() {
this.property = 'some value;
console.log('afterInitialize called');
};
new Model; // afterInitialize called
CREATE
Create hooks is being called when object is created.
The beforeCreate
hook accepts data
as a second argument.
Model.beforeCreate = function(next, data) {
// use data argument to update object
data.createdAt = new Date();
console.log('before');
next();
};
Model.afterCreate = function(next) {
this.notifySocialNetworks();
this.sendEmailNotifications();
console.log('after');
next();
};
Model.create({foo: 'bar'}, function(err, model) {
console.log('callback');
});
Example output will be:
before
after
callback
UPDATE
Update hooks called on each save except create.
The beforeUpdate
hook accepts data as second argument.
The data argument contains only actual data for update, not full object data.
Model.beforeUpdate = function(next, data) {
// use data argument to update object
// in update hook data argumen only contains data for update (not
// full object)
data.updatedAt = new Date();
console.log('before');
next();
};
Model.afterUpdate = function(next) {
this.scheduleFulltextIndexUpdate();
console.log('after');
next();
};
model.updateAttributes({foo: 'bar'}, function(err, model) {
console.log('callback');
});
Example output will be:
before
after
callback
SAVE
Save hooks called on each save, both during update and create.
The beforeSave
hook accepts data
as a second argument. For this cook hook data
argument is the same as this
when model.save() is called. When model.updateAttributes() called data argument contains only actual changes.
Model.beforeSave = function(next, data) {
if ('string' !== typeof data.tags) {
data.tags = JSON.stringify(data.tags);
}
next();
};
Model.afterSave = function(next) {
next();
};
DESTROY
Hook is destroyed once model.destroy()
is called. Please note that
destroyAll
method doesn't call destroy hooks.
VALIDATE
Validate hooks called before and after validation and should be used for data modification and not for validation. Use custom validation described in loopback-connector-validations(3) man section.
SEE ALSO
loopback-connector-model(3) loopback-connector-validations(3)