Feathers Custom Methods
💥 Create feathers service with custom methods names.
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