更新sailsjs模型afterCreate挂钩中的undefined

在我的sailsjs应用程序中,我试图添加一个默认的头像为我的用户创build用户后,所以我在models/User.js这个afterCreate挂钩:

 var User = { // ... attributes: { avatar: { model: 'Image' }, // ... }, afterCreate: function(user, next){ var url = sails.config.s3 + "/" + sails.config.default_avatar; sails.log.info(user); // This displays the proper user var data = { url: url, isAvatar: true, user: user.id }; Image.create(data) .exec( function (err, image) { sails.log.info(image); // This displays the proper image User.update(image.user, { avatar: image.id}) .exec( sails.log.info ); }); next(); }, } 

我不断收到错误:

  /Users/rcanty/Workspace/project/server/api/models/User.js:55 return User.update(image.user, { avatar: image.id}).exec( sails.log.info ^ TypeError: undefined is not a function at /Users/rcanty/Workspace/project/server/api/models/User.js:55:19 at bound (/usr/local/lib/node_modules/sails/node_modules/lodash/dist/lodash.js:957:21) at applyInOriginalCtx (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:416:80) at wrappedCallback (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/normalize.js:315:18) at callback.success (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/switchback/lib/normalize.js:33:31) at _switch (/usr/local/lib/node_modules/sails/node_modules/waterline/node_modules/switchback/lib/factory.js:48:28) at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/dql/create.js:241:9 at /usr/local/lib/node_modules/sails/node_modules/async/lib/async.js:157:25 at bound.<anonymous> (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/schema.js:151:44) at fn (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/callbacksRunner.js:60:10) at iterate (/usr/local/lib/node_modules/sails/node_modules/async/lib/async.js:149:13) at Object.async.eachSeries (/usr/local/lib/node_modules/sails/node_modules/async/lib/async.js:165:9) at Object.runner.afterCreate (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/utils/callbacksRunner.js:63:9) at after (/usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/dql/create.js:236:17) at /usr/local/lib/node_modules/sails/node_modules/waterline/lib/waterline/query/dql/create.js:223:67 at bound (/usr/local/lib/node_modules/sails/node_modules/lodash/dist/lodash.js:957:21) 

不过,看起来我正在做水线文档中所规定的内容

我认为这种types的东西应该在你的用户控制器里面,而不是在模型里面。 您试图修改您正在定义的模型内定义的模型。

将其移动到控制器,并在createUser函数结束时调用它。

编辑:

尝试移动属性对象外的函数,并添加var User = this; ,以便它可以参考:

  var User = { // ... attributes: { avatar: {model: 'Image'}, // ... }, afterCreate: function(user, next){ var url = sails.config.s3 + "/" + sails.config.default_avatar; sails.log.info(user); // This displays the proper user var data = { url: url, isAvatar: true, user: user.id }; var User = this; // for internal reference Image.create(data) .exec( function (err, image) { sails.log.info(image); // This displays the proper image User.update(image.user, { avatar: image.id}) .exec( sails.log.info ); }); next(); } }