如何在 MEAN 堆栈中实现命中计数器?
How to implement a hit counter in MEAN stack?
问题:
我如何对用户的每个 post 进行点击计数?
每个查看该页面的独立访问者的计数都应该增加。
我知道如何增加计数并将其保存在服务器端,但如何通过 IP 限制它并防止操纵?
P.S.: 我不想为此使用 GA(Google 分析)。
参考:
这提到使用缓存。有人可以解释一下 javascript 中的样子吗?
Page View Counter like on Whosebug
一个选项是为post的id和用户的IP创建一个文档,以确保访问者的唯一性。这可能看起来像这样:
var hitSchema = mongoose.Schema({
postId: STRING,
ip: STRING
});
输入几个条目后,该文档将如下所示:
[{
postId: 1,
ip: 192.168.0.1
}, {
postId: 1,
ip: 192.168.0.2
}]
现在,当您对 post 执行获取请求时,检查是否已记录 post 的 IP,如果没有则添加它。
app.get('/api/posts/:id', function(req, res) {
var postId = req.params.id;
var ip = req.connection.remoteAddress;
Hit.find({postId: postId, ip: ip}).then(function(result) {
//var newVisitor = false;
if (!result) { /* add a new record and newVisitor = true */
return Post.find({id: postId}).then(function(post) {
//if (newVisitor) { /* update the counter on the post */
res.send(post);
});
});
});
现在,我们现在所完成的是对所有访客的独特价值。然后,您可以查询文档并获取访问过的 IP 列表以获取计数,或者使用新 IP 在 Post
对象上添加一个计数器,如果找不到则递增它。
当您需要提高算法效率时,最后一个选项是正常的。
问题:
我如何对用户的每个 post 进行点击计数?
每个查看该页面的独立访问者的计数都应该增加。
我知道如何增加计数并将其保存在服务器端,但如何通过 IP 限制它并防止操纵?
P.S.: 我不想为此使用 GA(Google 分析)。
参考:
这提到使用缓存。有人可以解释一下 javascript 中的样子吗?
Page View Counter like on Whosebug
一个选项是为post的id和用户的IP创建一个文档,以确保访问者的唯一性。这可能看起来像这样:
var hitSchema = mongoose.Schema({
postId: STRING,
ip: STRING
});
输入几个条目后,该文档将如下所示:
[{
postId: 1,
ip: 192.168.0.1
}, {
postId: 1,
ip: 192.168.0.2
}]
现在,当您对 post 执行获取请求时,检查是否已记录 post 的 IP,如果没有则添加它。
app.get('/api/posts/:id', function(req, res) {
var postId = req.params.id;
var ip = req.connection.remoteAddress;
Hit.find({postId: postId, ip: ip}).then(function(result) {
//var newVisitor = false;
if (!result) { /* add a new record and newVisitor = true */
return Post.find({id: postId}).then(function(post) {
//if (newVisitor) { /* update the counter on the post */
res.send(post);
});
});
});
现在,我们现在所完成的是对所有访客的独特价值。然后,您可以查询文档并获取访问过的 IP 列表以获取计数,或者使用新 IP 在 Post
对象上添加一个计数器,如果找不到则递增它。
当您需要提高算法效率时,最后一个选项是正常的。