mikec / kalamata

Extensible REST API for Express + Bookshelf.js
MIT License
41 stars 12 forks source link

Loading nested relations #9

Open matt-dalton opened 7 years ago

matt-dalton commented 7 years ago

Thanks for this library!

I might have missed something, but is it possible to load nested relations (as you would in bookshelf)?

e.g. /users?load=things,things.morethings,things.moreThings.moreNestedThings

Doing so for me errors in the getWithRelatedArray function:

TypeError: Cannot read property 'before' of undefined
<br> &nbsp; &nbsp;at Builder.relObj.(anonymous function)  (/Users/me/projects/talisker/node_modules/kalamata/src/index.js:432:38)
<br> &nbsp; &nbsp;at selectConstraints (/Users/me/projects/talisker/node_modules/bookshelf/lib/relation.js:247:46)
<br> &nbsp; &nbsp;at Sync.&lt;anonymous&gt; (/Users/me/projects/talisker/node_modules/bookshelf/lib/sync.js:161:21)
<br> &nbsp; &nbsp;at PassThroughHandlerContext.finallyHandler (/Users/me/projects/talisker/node_modules/bluebird/js/release/finally.js:57:23)
<br> &nbsp; &nbsp;at PassThroughHandlerContext.tryCatcher (/Users/me/projects/talisker/node_modules/bluebird/js/release/util.js:16:23)
<br> &nbsp; &nbsp;at Promise._settlePromiseFromHandler (/Users/me/projects/talisker/node_modules/bluebird/js/release/promise.js:512:31)
<br> &nbsp; &nbsp;at Promise._settlePromise (/Users/me/projects/talisker/node_modules/bluebird/js/release/promise.js:569:18)
<br> &nbsp; &nbsp;at Promise._settlePromise0 (/Users/me/projects/talisker/node_modules/bluebird/js/release/promise.js:614:10)
nabilfreeman commented 7 years ago

Hey @matt-dalton , I also got this error today.

The way I patched it was to wrap the runHooks method in an if statement to check that it actually exists.

Before:

relObj[r] = function(qb) {
    runHooks(relHooks.before.getRelated, [req, res, qb]);
};

After:

relObj[r] = function(qb) {
    if(relHooks){
        runHooks(relHooks.before.getRelated, [req, res, qb]);
    }
};

(but I don't know what effect this has on the code - there might be a more serious underlying issue)