我有一个非常基本的网站,有一个非常基本的想法:当用户连接到网站时,它应该说"点击次数:0"当他按下键盘上的按钮时,它应该clicks++
并更新到"点击次数:1" (假设没有人点击过)。
我需要使用NodeJS和Socket.io安全地执行此操作。我有计数功能,它可以工作,但我不知道如何存储点击量。通常我会在数据库或某种类型中执行此操作,然后偶尔更新一次(每次单击更新它会产生大量负载?)。
socket.on("update", function() {
$("#clicks").text(clicks++);
});
$("body, window").on("keyup", function() {
socket.emit("update");
});
当我这样做时(假设我的clicks
变量已定义),它将在所有客户端上更新。确实如此。
存储clicks
变量的最佳方法是什么?当你最初启动网站时,显然你需要做clicks = database.get("clicks")
(如果你知道我的意思)。谢谢!
答案 0 :(得分:1)
由于您更喜欢将sql与nodejs一起使用,因此有一个很好的解决方案 - Sequalize
有一个way你只需使用它的实例方法就可以增加它:
User.findById(1).then(function(user) {
return user.increment('clicks', { by: 1 })
}).then(/* ... */);
P.S: { by: 1 }
是可选的。您可以找到更多示例here。
var Clicks = sequelize.define('clicks', {
name: { type: Sequelize.STRING, allowNull: true },
amount: { type: Sequalize.INTEGER, defaultValue: 0 }
}, {
freezeTableName: true
});
// Create table if not created yet
Clicks.sync();
// somewhere in your sockets callback
Clicks.findOrCreate({ where: { id: 1 }, defaults: { amount: 1 }})
.spread(function(click, created) {
if (created) {
// created first time with default value, send some response back here
} else {
click.increment('amount', { by: 1 })
.then(function() {
// send some response back to user(-s)
});
}
});