我在环回中制作游戏后端。 我有一个这样定义的用户模型。
{
"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();
});
};
但在我的数据库中没有显示任何内容,是否有人知道如何解决这个问题?
答案 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();
}
});
};