Newly Paranoid Maintainers

    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

    Install

    npm i loopback-setup-hooks-mixins

    DownloadsWeekly Downloads

    7

    Version

    1.0.0

    License

    MIT

    Last publish

    Collaborators

    • c3s4r
    • devsu