问题:
如何在用户发布的每个帖子上实现点击计数?
对于查看该页面的每个唯一身份访问者,计数应该会增加。
我知道如何增加计数并保存服务器端,但如何通过IP限制并防止操作?
P.S。:我不希望使用GA(Google Analytics)。
参考:
这提到使用缓存。有人可以解释这在javascript中的外观吗?
答案 0 :(得分:1)
一个选项是为帖子的ID和用户的IP创建文档,以确保唯一身份访问者。这看起来像这样:
B
在几个条目之后,这个文档看起来像这样:
var hitSchema = mongoose.Schema({
postId: STRING,
ip: STRING
});
现在,当您对帖子进行get请求时,请检查是否已为帖子记录了IP,如果没有,则添加它。
[{
postId: 1,
ip: 192.168.0.1
}, {
postId: 1,
ip: 192.168.0.2
}]
现在,我们现在所取得的成就是所有访客的独特价值。然后,您可以查询文档并获取已访问的IP列表以获取计数,或者使用新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);
});
});
});
对象上添加计数器,然后如果找不到则增加此值。
当您需要提高算法效率时,最后一个选项是正常的。