javascript - sailsjs "Error: There was an error turning the model into an object." -
sailsjs 0.11, node 0.12.4. passport 0.2.1 , passport-local 1.0
using sailsjs blueprint routes see what's going on. project simple blog, , tried looking @ user profile in blueprint route /user/4
show me userid 4. message result.
any ideas caused this?
note: haven't been anywhere near sails/waterline source.
full error message
/home/vagrant/nodeprojs/<project>/node_modules/sails/node_modules/waterline/lib/waterline/model/lib/defaultmethods/toobject.js:59 throw err; ^ error: there error turning model object. @ new module.exports (/home/vagrant/nodeprojs/<project>/node_modules/sails/node_modules/waterline/lib/waterline/model/lib/defaultmethods/toobject.js:56:15) @ prototypefns.toobject (/home/vagrant/nodeprojs/<project>/node_modules/sails/node_modules/waterline/lib/waterline/model/index.js:30:14) @ prototypefns.tojson (/home/vagrant/nodeprojs/<project>/node_modules/sails/node_modules/waterline/lib/waterline/model/index.js:112:20) @ object.stringify (native) @ serverresponse.res.json (/home/vagrant/nodeprojs/<project>/node_modules/sails/node_modules/express/lib/response.js:217:19) @ sendjson (/home/vagrant/nodeprojs/<project>/api/responses/ok.js:34:23) @ viewready (/home/vagrant/nodeprojs/<project>/api/responses/ok.js:72:25) @ viewfailedtorender (/home/vagrant/nodeprojs/<project>/node_modules/sails/lib/hooks/views/res.view.js:276:16) @ function.app.render (/home/vagrant/nodeprojs/<project>/node_modules/sails/node_modules/express/lib/application.js:514:14) @ serverresponse.res.render (/home/vagrant/nodeprojs/<project>/node_modules/sails/node_modules/express/lib/response.js:827:7) @ serverresponse.res.view (/home/vagrant/nodeprojs/<project>/node_modules/sails/lib/hooks/views/res.view.js:237:16) @ object.sendok (/home/vagrant/nodeprojs/<project>/api/responses/ok.js:71:19) @ serverresponse.bound [as ok] (/home/vagrant/nodeprojs/<project>/node_modules/sails/node_modules/lodash/dist/lodash.js:729:21) @ found (/home/vagrant/nodeprojs/<project>/node_modules/sails/lib/hooks/blueprints/actions/findone.js:37:9) @ wrapper (/home/vagrant/nodeprojs/<project>/node_modules/sails/node_modules/waterline/node_modules/lodash/index.js:3602:19) @ applyinoriginalctx (/home/vagrant/nodeprojs/<project>/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:421:80)
and user.js model. tojson commented out because message pointed section. after commenting out, line 3 (at user.attributes.tojson
) different.
var bcrypt = require ('bcrypt') var user = { attributes: { email: { type: 'email', required: true, unique: true }, password: { type: 'string', minlength: 6, required: true }, admin: { type: 'boolean', defaultsto: false // separate acl }, acl: { type: 'string', defaultsto: 'user' // mod, user (unlogged should guest) } /* tojson: function() { var obj = this.toobject(); delete obj.password; return obj; } */ }, beforecreate: function(user, cb) { bcrypt.gensalt(10, function(err, salt) { bcrypt.hash(user.password, salt, function(err, hash) { if (err) { console.log(err); cb(err); } else { user.password = hash; cb(); } }); }); } }; module.exports = user;
[$e] after further review, did object-to-string conversion , output @ several points. object on first line of try
statement, , first line of subsequestn catch
statement this:
waterline:toobject > this.object try= >>> email: admin@admin.com password: $2a$10$bnktavahfa3f8q8ltv262u9rrluqdvp7szfm6dqqki3ylixdlmwxk admin: true acl: user createdat: fri may 29 2015 23:25:35 gmt+0000 (utc) updatedat: fri may 29 2015 23:25:35 gmt+0000 (utc) id: 1 _locals: [object object] <<< +2ms waterline:toobject > this.object catch= >>> email: admin@admin.com password: $2a$10$bnktavahfa3f8q8ltv262u9rrluqdvp7szfm6dqqki3ylixdlmwxk admin: true acl: user createdat: fri may 29 2015 23:25:35 gmt+0000 (utc) updatedat: fri may 29 2015 23:25:35 gmt+0000 (utc) id: 1 _locals: [object object] <<<
(this output isn't supposed json, it's dump)
unless has better idea, think i'm going move on over sailsjs issue tracker.
i had problem, , after huge amount of trouble i've managed fix (i think it's taken me long fix bug took build app in first place...)
without seeing controller code, don't know if fix you, me, problem tojson
seems happen when feeding user model partial. found explicitly rendering model json before passing render function fixed problem.
in other words, changed this:
res.render('partials/user-card', user, function(err, html){ partialdata = user.tojson(); partialdata.html = html; // send out message (with html fragment) socket subscribers user.publishupdate(user.id, partialdata); });
...to this:
partialdata = user.tojson(); res.render('partials/user-card', partialdata, function(err, html){ partialdata.html = html; // send out message (with html fragment) socket subscribers user.publishupdate(user.id, partialdata); });
(ie. move user.tojson out of render function's callback, , feed json rather model render function). allowed me retain password-removing tojson
method too.
Comments
Post a Comment