【问题标题】:strongloop creating related model object in afterRemote methodstrongloop 在 afterRemote 方法中创建相关模型对象
【发布时间】:2015-01-21 05:43:20
【问题描述】:

说我有一个游戏场景。

游戏属于用户。

game.json:

{
  "name": "game",
  "base": "PersistedModel",
  "idInjection": true,
  "properties": {
    "beer_points_required": {
      "type": "number",
      "required": true
    },
    "total_points": {
      "type": "number",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "game_blngs_to_user": {
      "type": "belongsTo",
      "model": "user",
      "foreignKey": ""
    }
  },
  "acls": [],
  "methods": []
}

user.json:

{
  "name": "user",
  "base": "User",
  "idInjection": true,
  "properties": {
    "last_game": {
      "type": "date",
      "required": false
    },
    "name": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {},
  "acls": [
    {
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "ALLOW"
    }
  ],
  "methods": []
}

我试图在通过 CRUD 创建用户后以编程方式为用户创建游戏对象,所以在 user.js 中我有:

var config = require('../../server/config.json');
var path = require('path');
var app = require('../app');

module.exports = function(user) {

user.afterRemote('create', function(context, user) {
    console.log('> user.afterRemote triggered');

  //create a game for each user thats created
  var Game = app.models.game;
  game.create({game_blngs_to_userId: user.id, beer_points_required: 0, total_points: 0},function(err, res){
 if(err){
      console.log('\n\n>>err');
      console.log(err);
      next(err);
      return;
    }
    console.log(res);
  });
});

但是,这显然不起作用,哈哈,所以我想知道如何真正实现我的目标。很长一段时间以来,我一直在关注强大的循环文档,似乎他们的 api 的实际使用情况并没有很好的记录……至少在我看来。任何人都可以为我解释一下吗?

【问题讨论】:

  • 你能澄清一下,什么不起作用吗?

标签: node.js loopbackjs strongloop


【解决方案1】:

也许,您在 afterRemote 回调中缺少第三个参数 - next 函数。

user.afterRemote('create', function(context, user, next) {
  ...
  var Game = app.models.game;
  game.create({game_blngs_to_userId: user.id, beer_points_required: 0, total_points: 0},function(err, res){
 if(err){
      console.log(err);
      next(err);
      return;
    }
    next() // countinue execution
  });
}); 

【讨论】:

  • 我现在正在测试这个,我会尽快通知你。谢谢!!
  • 我相信你的答案会起作用,但是,我无法保留var app = require('../app'); 这行它不会编译它(如果 compile 是正确的词)所以服务器不会启动。因此我相信var Game = app.models.game; 行的应用程序实例是未定义的。我怎样才能得到一个有效的应用程序实例?或者至少是一个有效的游戏实例。
【解决方案2】:

我认为您的用户引用未定义...尝试:

app.models.user.afterRemote

【讨论】:

  • 用户工作,问题是我无法创建游戏并将 blngs_to 设置为用户。我什至没有进入 game.create 功能。有什么想法吗?
  • 使用var Game = user.app.models.game;
猜你喜欢
  • 2015-01-08
  • 2016-10-29
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
相关资源
最近更新 更多