@hookcompany/feathers-custom-methods

💥 Create feathers service with custom methods names.

Stats

StarsIssuesVersionUpdatedCreatedSize
@hookcompany/feathers-custom-methods
1.10.03 years ago3 years agoMinified + gzip package size for @hookcompany/feathers-custom-methods in KB

Readme

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

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.