ianhaggerty / backbone-sails

A plugin for Backbone that makes integrating with Sails JS easier. Both leverage a model-view architecture, it's only natural to have them talk to each other.
MIT License
7 stars 1 forks source link

Cannot read property 'id' of null #8

Closed dottodot closed 9 years ago

dottodot commented 9 years ago

I'm get the following error when fetch a single model and not really sure what would be causing it, and it's not happening on every model in the collection.

/Users/marcus/hosts/dbapi/api/blueprints/helpers/actionUtil.js:121
          console.log(record[AssociatedModel.primaryKey]);
                            ^
TypeError: Cannot read property 'id' of null
    at /Users/marcus/hosts/dbapi/api/blueprints/helpers/actionUtil.js:121:29
    at Function.forEach (/Users/marcus/hosts/dbapi/node_modules/lodash/dist/lodash.js:3297:15)
    at Object.module.exports.subscribeDeep (/Users/marcus/hosts/dbapi/api/blueprints/helpers/actionUtil.js:112:14)
    at /Users/marcus/hosts/dbapi/api/blueprints/findone.js:21:20
    at bound (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/lodash/dist/lodash.js:957:21)
    at applyInOriginalCtx (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:416:80)
    at wrappedCallback (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:315:18)
    at _normalizeCallback.callback.success (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/node_modules/node-switchback/lib/normalize.js:33:31)
    at _switch (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/node_modules/node-switchback/lib/factory.js:35:28)
    at returnResults (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic.js:163:9)
    at /Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic.js:74:16
    at /Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:77:45
    at bound (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/lodash/dist/lodash.js:957:21)
    at applyInOriginalCtx (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:416:80)
    at wrappedCallback (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:315:18)
    at _normalizeCallback.callback.success (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/node_modules/node-switchback/lib/normalize.js:33:31)
ianhaggerty commented 9 years ago

Try updating to the latest release.

Otherwise, check the integrity of your associations.

This hasn't cropped up in tests, so I may need a little more information.

dottodot commented 9 years ago

Same issue occurs in this release. It is something to do with an association as it's only happening on models where the associated collection is empty.

Sorry but what do you mean by check the integrity of your associations

ianhaggerty commented 9 years ago

Can you repost the error log with the latest release.

dottodot commented 9 years ago
/Users/marcus/hosts/dbapi/api/blueprints/helpers/actionUtil.js:122
            if (record[AssociatedModel.primaryKey] != null) {
                      ^
TypeError: Cannot read property 'id' of null
    at /Users/marcus/hosts/dbapi/api/blueprints/helpers/actionUtil.js:122:23
    at Function.forEach (/Users/marcus/hosts/dbapi/node_modules/lodash/dist/lodash.js:3297:15)
    at Object.module.exports.subscribeDeep (/Users/marcus/hosts/dbapi/api/blueprints/helpers/actionUtil.js:113:16)
    at /Users/marcus/hosts/dbapi/api/blueprints/findone.js:21:20
    at bound (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/lodash/dist/lodash.js:957:21)
    at applyInOriginalCtx (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:416:80)
    at wrappedCallback (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:315:18)
    at _normalizeCallback.callback.success (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/node_modules/node-switchback/lib/normalize.js:33:31)
    at _switch (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/node_modules/node-switchback/lib/factory.js:35:28)
    at returnResults (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic.js:163:9)
    at /Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic.js:74:16
    at /Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:77:45
    at bound (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/lodash/dist/lodash.js:957:21)
    at applyInOriginalCtx (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:416:80)
    at wrappedCallback (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:315:18)
    at _normalizeCallback.callback.success (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/node_modules/node-switchback/lib/normalize.js:33:31)
ianhaggerty commented 9 years ago

This is happening in a loop over your associated collection, only conclusion is that there is a rogue null element lurking about in there somewhere. I gotta dash, but should be a relatively quick fix tonight.

ianhaggerty commented 9 years ago

The null element is probably stemming from the waterline adapters. What database are you using?

dottodot commented 9 years ago

I'm using mongo

ianhaggerty commented 9 years ago

Just added a conditional for associated collections - try the latest release. Let me know if there are any other problems.

dottodot commented 9 years ago

OK so I now get a slightly different error. So the model I'm trying to get has no comments and this seems to be causing the error, whereas model that do have comments don't throw the error. Let me know if you want any of my code to assist working this out.

/Users/marcus/hosts/dbapi/api/blueprints/helpers/actionUtil.js:117
        if (assoc.type === 'collection' && record[assoc.alias]) {
                                                 ^
TypeError: Cannot read property 'comments' of null
    at /Users/marcus/hosts/dbapi/api/blueprints/helpers/actionUtil.js:117:50
    at Function.forEach (/Users/marcus/hosts/dbapi/node_modules/lodash/dist/lodash.js:3297:15)
    at Object.module.exports.subscribeDeep (/Users/marcus/hosts/dbapi/api/blueprints/helpers/actionUtil.js:113:16)
    at /Users/marcus/hosts/dbapi/api/blueprints/findone.js:21:20
    at bound (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/lodash/dist/lodash.js:957:21)
    at applyInOriginalCtx (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:416:80)
    at wrappedCallback (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:315:18)
    at _normalizeCallback.callback.success (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/node_modules/node-switchback/lib/normalize.js:33:31)
    at _switch (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/node_modules/node-switchback/lib/factory.js:35:28)
    at returnResults (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic.js:163:9)
    at /Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/basic.js:74:16
    at /Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/query/finders/operations.js:77:45
    at bound (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/lodash/dist/lodash.js:957:21)
    at applyInOriginalCtx (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:416:80)
    at wrappedCallback (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:315:18)
    at _normalizeCallback.callback.success (/Users/marcus/hosts/dbapi/node_modules/sails/node_modules/waterline/node_modules/node-switchback/lib/normalize.js:33:31)
ianhaggerty commented 9 years ago

As mentioned, I suspect this is stemming from the database layer, so it would be difficult to reproduce the error on my end.

Have you tried updating your sails-mongo adapter?

It may be the case that waterline is populating with a null when the id referenced cannot be found.

I have just pushed again. Try the latest release (after updating your adapter) and let me know if you have any luck.

dottodot commented 9 years ago

It's ok I've found the issue, they was an association (not actually comments) that had somehow got a null value stored in it. The error was making me look in the wrong place.