@hookcompany/feathers-custom-methods

    1.10.0 • Public • Published

    Feathers Custom Methods

    💥 Create feathers service with custom methods names.

    NPM version

    Npm Downloads

    Getting Started

    Use npm:

    npm install --save-dev babel-plugin-transform-decorators-legacy
    npm install --save @hookcompany/feathers-custom-methods

    Or use yarn:

    yarn add --dev babel-plugin-transform-decorators-legacy
    yarn add @hookcompany/feathers-custom-methods

    Step 1: Babel Configuration

    You have to configure decorators plugin on babelrc.

    .babelrc

    {
      "presets": ["es2015"],
      "plugins": ["transform-decorators-legacy"]
    }

    Step 2: Service Config

    You have to pass to customMethods function the service instance, path and hooks. And this function will return an object that has the service instance, path and hooks.

    users.service.js

    import customMethods from '@hookcompany/feathers-custom-methods';
    import Service from './users.class.js';
    import externalHooks from'./users.hooks';
    
    export default function() {
      const app = this;
      const paginate = app.get('paginate');
      const options = { name: 'users', paginate };
      const { service, path, hooks } = customMethods(
        new Service(options),
        '/users',
        externalHooks
      );
    
      app.use(path, service);
    
      const usersService = app.service(path);
    
      usersService.hooks(hooks);
    };

    Step 3: Service Class

    After configure service, you can create your service class with custom methods, using decorators, like this:

    users.class.js

    import { find, get, create, update, patch, remove } from '@hookcompany/feathers-custom-methods';
    
    class Service {
      @find
      foo() {
        return Promise.resolve([]);
      }
    
      @find
      bar() {
        return Promise.resolve([]);
      }
    
      @get
      buzz(id) {
        return Promise.resolve({ id, text: `A new message with ID: ${id}!` });
      }
    
      @create
      foobar(data, params) {
        return Promise.resolve(data);
      }
    
      @update
      foobuzz(id, data, params) {
        return Promise.resolve(data);
      }
    
      @patch
      barbuzz(id, data, params) {
        return Promise.resolve(data);
      }
    
      @remove
      foobarbuzz(id, params) {
        return Promise.resolve({ id });
      }
    }
    
    export default Service;

    Step 4: Hooks

    Besides use custom methods on the service, you can use on hooks too, like this:

    users.hooks.js

    const logger = () => context => console.log(context.params);
    
    export default {
      before: {
        all: [logger()],
        foo: [logger()],
        bar: [logger()],
        buzz: [logger()],
        foobar: [logger()],
        foobuzz: [logger()],
        barbuzz: [logger()],
        foobarbuzz: [logger()]
      },
      after: {
        all: [logger()],
        foo: [logger()],
        bar: [logger()],
        buzz: [logger()],
        foobar: [logger()],
        foobuzz: [logger()],
        barbuzz: [logger()],
        foobarbuzz: [logger()]
      },
      error: {
        all: [logger()],
        foo: [logger()],
        bar: [logger()],
        buzz: [logger()],
        foobar: [logger()],
        foobuzz: [logger()],
        barbuzz: [logger()],
        foobarbuzz: [logger()]
      }
    };

    Step 5: Consuming The Service Methods

    You can consume the service methods, like that:

    Method foo(find)

    [GET] localhost:3030/users/foo

    Method bar(find)

    [GET] localhost:3030/users/bar

    Method buzz(get)

    [GET] localhost:3030/users/buzz/:id

    Method foobar(create)

    [POST] localhost:3030/users/foobar

    Method foobuzz(update)

    [PUT] localhost:3030/users/foobuzz/:id

    Method barbuzz(patch)

    [PATCH] localhost:3030/users/barbuzz/:id

    Method foobarbuzz(remove)

    [DELETE] localhost:3030/users/foobarbuzz/:id

    Install

    npm i @hookcompany/feathers-custom-methods

    DownloadsWeekly Downloads

    3

    Version

    1.10.0

    License

    MIT

    Unpacked Size

    14.4 kB

    Total Files

    9

    Last publish

    Collaborators

    • hileomsi
    • iagosilva96
    • rastelli
    • roganmelo