Loopback中的用户信息

时间:2016-07-19 14:05:17

标签: node.js loopbackjs strongloop

我在环回中制作游戏后端。 我有一个这样定义的用户模型。

{
  "name": "player",
  "base": "User",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "name": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "stats": {
      "type": "hasOne",
      "model": "stats",
      "foreignKey": ""
    }
  },
  "acls": [],
  "methods": {}
}

我将用户统计信息定义为:

{
  "name": "stats",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "experience": {
      "type": "number",
      "required": true,
      "default": 0
    },
    "coins": {
      "type": "number",
      "required": true,
      "default": 0
    },
    "titles": {
      "type": [
        "string"
      ],
      "required": true,
      "default": []
    }
  },
  "validations": [],
  "relations": {},
  "acls": [],
  "methods": {}
}

我想最终使用ALC,以便用户无法修改自己的统计数据。但目前我无法确定如何在用户注册时自动创建状态。我的第一次尝试是使用操作挂钩生成统计数据,因此我的player.js文件是:

module.exports = function (Player) {
    var app = require('../../server/server');
    Player.observe('after save', function filterProperties(ctx, next) {
        var Stats = app.models.Stats;
        if(ctx.isNewInstance) {
            Stats.create({"playerId": ctx.instance.id});
        }
        next();
    });
};

但在我的数据库中没有显示任何内容,是否有人知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我要做的第一件事是向Stats.create()方法添加一个正确的回调,以查看为什么create方法没有按照您的预期进行操作,以及一些更多的逻辑发送next()取决于操作的结果。我还改变了如何通过播放器模型访问统计模型的参考。

module.exports = function (Player) {

  Player.observe('after save', function filterProperties(ctx, next) {

    var Stats = Player.app.models.Stats;

    if(ctx.isNewInstance) {

      Stats.create({"playerId": ctx.instance.id}, function(err, stats) {

        if(err) {
          console.log("[Player after save] error creating stats instance for playerId " + ctx.instance.id, err);
          next(err);
        } else {
          console.log("[Player after save] Created new empty stats instance for playerId " + ctx.instance.id, stats);
          next();
        }

      });

    } else {
      console.log("[Player after save] Existing player instance, did not create stats");
      next();

    }

  });

};