feathers-trigger
Version:
Add triggers and actions to your feathers app.
88 lines (62 loc) • 4.02 kB
Markdown
# feathers-trigger
<p align="center">
<img src="https://feathers-trigger.netlify.app/img/logo.svg" width="200">
</p>
> NOTE: This is the version for Feathers v5. For Feathers v4 use [feathers-trigger v0](https://github.com/fratzinger/feathers-trigger/tree/crow)
[](https://www.npmjs.com/package/feathers-trigger)
[](https://github.com/fratzinger/feathers-trigger/actions)
[](https://qlty.sh/gh/fratzinger/projects/feathers-trigger)
[](https://qlty.sh/gh/fratzinger/projects/feathers-trigger)
[](https://libraries.io/npm/feathers-trigger)
[](https://www.npmjs.com/package/feathers-trigger)
[](https://github.com/fratzinger/feathers-trigger/blob/master/LICENSE)
## Documentation
For more information, please have a look at the docs: [https://feathers-trigger.netlify.app/](https://feathers-trigger.netlify.app/getting-started.html)
## Installation
```bash
npm i feathers-trigger
```
## Usage
Imagine you want to notify users when a `post` gets published.
How can this be done? In this example a `post` has a `publishedAt` property which shows when a `post` was published. A `post` with `publishedAt === null` means that the `post` is not published yet. A `post` can be created as a draft which is not published.
But how do you know when a `post` gets published? Sounds silly, but there are three possibilities:
- A `post` gets created with `publishedAt: { $ne: null }`.
- A `post` gets updated by **data** `publishedAt: { $ne: null }`, it had `publishedAt: null` before and the **result** really has `publishedAt: { $ne: null }`.
- A `post` gets patched by **data** `publishedAt: { $ne: null }`, it had `publishedAt: null` before and the **result** really has `publishedAt: { $ne: null }`.
How can this be accomplished?
1. Check `context.data` for `publishedAt: { $ne: null }` and if that's not true, the subscription is not true.
2. Check if the post in the database has `publishedAt === null` and therefore is not published yet. You need to check that in a `before` hook. If that's not true, the subscription is not true.
3. Check if the `context.result` really has `publishedAt: { $ne: null }` (maybe it's handled by another permission hook, or something). If that's not true, the subscription is not true.
4. If all three checks are true, run the `notify` function.
It's up to you how you define the `notify` action. For the example above the solution with `feathers-trigger` looks like the following:
```js
// posts.hooks.js
import { trigger } from "feathers-trigger";
const notifyPublished = trigger({
data: { publishedAt: { $ne: null } },
before: { publishedAt: null },
result: { publishedAt: { $ne: null } },
action: ({ item }, context) => {
return context.app.service("/notify").create(item);
},
});
export default {
before: {
create: [notifyPublished],
update: [notifyPublished],
patch: [notifyPublished],
},
after: {
create: [notifyPublished],
update: [notifyPublished],
patch: [notifyPublished],
},
};
```
For more advanced examples, please have a look at the [docs](https://feathers-trigger.netlify.app/getting-started.html)
## Testing
Simply run `npm test` and all your tests in the `test/` directory will be run. It has full support for _Visual Studio Code_. You can use the debugger to set breakpoints.
## Help
For more information on all the things you can do, visit [FeathersJS](http://docs.feathersjs.com).
## License
Licensed under the [MIT license](LICENSE).