我今天遇到了挑战。我想要做的是为我的网站自动成就系统。我想每天检查用户是否符合获得新成就的要求。这些要求不会存储在数据库中,为了添加新的成就,我希望能够只定义一个新的javascript对象/原型,这些就是这些。
我正在使用风帆,我不知道我的方法是否正确。我正在使用方法" checkForAchievements"我希望它检查所有用户,以及他们是否满足定义的每个成就的要求。如果他们这样做,我会在我的表user_achievement中添加一条记录。这是我到目前为止所尝试的:
exports.checkForAchievements = function(callback) {
var AchievementsValidator = function(achievement, user) {
this.achievement = achievement;
this.user = user;
this.validation = function() {
return true;
};
this.giveAchievement = function() {
UserAchievement.findOrCreate({ user: this.user, achievement: this.achievement}, { user: this.user, achievement: this.achievement })
.exec(function(err, userAchievment) {});
}
};
//Example badge code, validation returns true if the user has at least 50 posts on the website
var FiftyPosts = function() {
this.validation = function() {
Post.count({ user: this.user }).exec(function(err, count) {
if (count >= 50) {
return true;
}
else {
return false;
}
})
};
};
//Loop in users and execute this code for each
FiftyPosts.prototype = new AchievementsValidator(22, user); // 22 would be the achivement in database
if (FiftyPosts.validation) {
FiftyPosts.giveAchievement();
}
callback();
};
是否有可能使用此代码?我觉得它会很混乱,因为我需要在最后一个循环中写下每个成就。此外,上面的代码无法正常工作我无法在徽章上执行验证。
注意:性能不是问题,因为此代码不会经常运行。我只希望这是可扩展的,这样我就可以添加新的成就而不会有太多的麻烦。 谢谢。
编辑:似乎问题不够明确,所以你走了:
如何在上面的代码中使用正确的方法获取FiftyPosts.validation?它没有使用上述任何一项(AchievementsValidator,FiftyPosts)。
如果你知道sails.js,你能告诉我在服务中这样做是不是一个好主意?