loopback-setup-hooks-mixins

1.0.0 • Public • Published

loopback-setup-hooks-mixins

Mixin for Loopback, to easily configure operation and remote hooks from the model configuration file.

It works with Loopback 2 and Loopback 3.

Installation

npm install --save loopback-setup-hooks-mixins

Configuration

First, modify your server/model-config.json to include the path to this module:

{
  "mixins": [
    "loopback/common/mixins",
    "loopback/server/mixins",
    "../common/mixins",
    "./mixins",
    "../node_modules/loopback-setup-hooks-mixins"
  ]
}

Then you can use the mixins from your model definition files:

...
  "mixins"{
    "SetupOperationHooks": {
      "source": "./common/models/employee-hooks.js",
      "before save": ["doSomething"],
      "before delete": ["checkSomething"]
    },
    "SetupRemoteHooks": {
      "source": "./common/models/employee-hooks.js",
      "beforeRemote": {
        "deleteById": ["checkSomethingElse"],
      },
      "afterRemote": {
        "create": ["doSomethingElse"]
      }
    }
  }
...

Available mixins

SetupOperationHooks

Configures the defined operation hooks in the model.

Options

  • source (optional)
  • name of the operation hooks (e.g. "before save", "after save", etc.)

Usage

For each operation hook that you want to configure, you will need to define a string or an array with the name(s) of the method(s) that should be called.

If you define source option, it will search the methods in that file, otherwise it will search the methods in the Model.

  "mixins"{
    "SetupOperationHooks": {
      "source": "./common/models/employee-hooks.js",
      "before save": "doSomething",
      "before delete": ["checkSomething", "doSomethingElse"]
    }
  }

The source file (employee-hooks.js in our example) would look like this:

const Promise = require('bluebird');
 
module.exports = {
  doSomething,
  checkSomething,
  doSomethingElse,
};
 
function doSomething(context) {
  return new Promise((resolve, reject) => {
    resolve();
  });
}
 
function checkSomething(context) {
  return new Promise((resolve, reject) => {
    resolve();
  });
}
 
function doSomethingElse(context) {
  return new Promise((resolve, reject) => {
    resolve();
  });
}

The example is using promises, but if your prefer you could use the next callback as well.

SetupRemoteHooks

Configures the defined remote hooks in the model.

Options

  • source (optional)
  • beforeRemote
  • afterRemote
  • afterRemoteError

Usage

The beforeRemote, afterRemote and afterRemoteError options should have the names of the remote methods you want to apply the hooks to.

Each remote method name is an object property that should contain a string or an array with the name(s) of the method(s) to be called.

If you define source, it will search the methods on that file, otherwise it will search the methods in the Model.

  "mixins"{
    "SetupRemoteHooks": {
      "source": "./common/models/employee-hooks.js",
      "beforeRemote": {
        "deleteById": ["checkSomething", "logSomething"],
      },
      "afterRemote": {
        "create": "doSomething"
      },
      "afterRemoteError": {
        "create": "doSomethingElse"
      }
    }
  }

The source file (employee-hooks.js in our example) would look like this:

module.exports = {
  doSomething,
  checkSomething,
  logSomething,
};
 
function doSomething(context, instance, next) {
  next();
}
 
function checkSomething(context, instance, next) {
  next();
}
 
function logSomething(context, instance, next) {
  next();
}

This example is not using promises, since it looks like they are not supported yet for remote hooks.

Credits

Created by c3s4r for Devsu.

Copyright Devsu LLC, 2016.

License: MIT

Package Sidebar

Install

npm i loopback-setup-hooks-mixins

Weekly Downloads

1

Version

1.0.0

License

MIT

Last publish

Collaborators

  • c3s4r
  • devsu