Loopback中的用户信息

User infomation in Loopback

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

{
  "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();
    });
};

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

我要做的第一件事是向 Stats.create() 方法添加适当的回调以查看创建方法为何没有按照您的预期进行,以及发送更多逻辑 next()取决于操作的结果。我还更改了通过 Player 模型访问 Stats 模型的方式。

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();

    }

  });

};