Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
A FeathersJS hook to implement `findOrCreate`
const findOrCreate = require('./hook.find-or-create.js')
before: {
create: [findOrCreate()]
'use strict';
* If the record doesn't already exist, create it and return it to the user.
module.exports = function(){
return function(hook){
const service ='/api/records');
let params = {
user: hook.params.user
return service.find(params)
.then(response => {
// If a service has pagination enabled or not, handle either way.
response = || response;
if (data.length) {
// Set `hook.result` to skip the db call to `create` if a record was found.
hook.result = response[0];
// Return the `hook` object for the next hook to use.
return hook;

This comment has been minimized.

Copy link

@eikaramba eikaramba commented Apr 23, 2017

line 18 data should be response i guess.


This comment has been minimized.

Copy link

@pkreipke pkreipke commented Oct 3, 2017

Improvement: line 7 - use 'hook.path' to generalize for all services.

Fix: line 9 - should be ''.

Very helpful!


This comment has been minimized.

Copy link

@TimNZ TimNZ commented Jan 26, 2018

Helpful for inspiration.

I would replace this with something that is atomic, such as sequelize.findOrCreate for SQL db.

Depending on your logical constraints for the schema/table, you don't want someone slipping in a create between your find that returns 0 records, and the subsequent create, if you aren't using DB level constraints.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.