2016-05-16 4 views
0

Вновь зарегистрированном реестре в afterCreate(newlyInsertedRecord, cb) {} отсутствует все методы экземпляра.Sails.js afterCreate() передается newCreatedRecord без методов экземпляра

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 }; 

При выполнении Dog.create({tail:'green'}).exec(console.log), следующее сообщение об ошибке и трассировки стека происходит:

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) 

Не уверен, что если применяется ответ на Sails.js model saved to session loses custom instance methods??

+0

Что произойдет, если вы удалите 'afterCreate()'? – Makah

+0

Вопрос в том, что передается afterCreate(). В 'dog' в afterCreate() отсутствуют его методы экземпляра, любая Собака, возвращенная Dog.find(), однако имеет все методы экземпляра, как ожидалось. – danba

ответ

1

afterCreate() Обратный вызов Lifecycle возвращает только добавленную стоимость в базе данных, то есть JSON. Пример:

{ 
    tail: "green", 
    createdAt: "...", 
    updatedAt: "...", 
    id: "173c69cbdc4810b70dd4fb73" 
} 

В этот момент у вас есть доступ только к JSON, а не к объекту с методами.