Reputation: 877
The newlyInsertedRecord in afterCreate(newlyInsertedRecord, cb) {}
is missing all instance methods.
1 /**
2 * Dog.js
3 *
4 * @description :: TODO: You might write a short summary of how this model works and what it represents here.
5 * @docs :: http://sailsjs.org/documentation/concepts/models-and-orm/models
6 */
7
8 module.exports = {
9
10 attributes: {
11 tail: 'string',
12 wag: function() {
13 console.log('wagging ', this.tail, 'tail')
14 }
15 },
16
17 afterCreate: function(dog, cb) {
18 dog.wag()
19 }
20 };
When executing Dog.create({tail:'green'}).exec(console.log)
, the following error and stack trace occurs:
sails> TypeError: dog.wag is not a function
at module.exports.afterCreate (/tmp/afterCreateTest/api/models/Dog.js:18:7)
at fn (/home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/callbacksRunner.js:60:10)
at /home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:181:20
at iterate (/home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:262:13)
at Object.async.forEachOfSeries.async.eachOfSeries (/home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:281:9)
at Object.async.forEachSeries.async.eachSeries (/home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/node_modules/async/lib/async.js:214:22)
at Object.runner.afterCreate (/home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/callbacksRunner.js:63:9)
at after (/home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/dql/create.js:243:17)
at /home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/dql/create.js:230:68
at wrapper (/home/user/.npm-packages/lib/node_modules/sails/node_modules/lodash/index.js:3592:19)
at applyInOriginalCtx (/home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:421:80)
at wrappedCallback (/home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:324:18)
at callback.success (/home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/node_modules/switchback/lib/normalize.js:33:31)
at _switch (/home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/node_modules/switchback/lib/factory.js:58:28)
at afterwards (/home/user/.npm-packages/lib/node_modules/sails/node_modules/waterline/lib/waterline/adapter/dql.js:89:19)
at wrapper (/home/user/.npm-packages/lib/node_modules/sails/node_modules/lodash/index.js:3592:19)
Not sure if the answer to Sails.js model saved to session loses custom instance methods? applies?
Upvotes: 0
Views: 364
Reputation: 4513
afterCreate()
Lifecycle callback only returns the value added in database, i.e. the JSON. Example:
{
tail: "green",
createdAt: "...",
updatedAt: "...",
id: "173c69cbdc4810b70dd4fb73"
}
In this moment you have only access to JSON, not object with methods.
Upvotes: 1