如何在MEAN堆栈中实现命中计数器?

时间:2017-02-08 11:47:05

标签: javascript node.js mongodb express mean-stack

问题:

如何在用户发布的每个帖子上实现点击计数?

对于查看该页面的每个唯一身份访问者,计数应该会增加。

我知道如何增加计数并保存服务器端,但如何通过IP限制并防止操作?

P.S。:我不希望使用GA(Google Analytics)。

参考:

这提到使用缓存。有人可以解释这在javascript中的外观吗?

Page View Counter like on StackOverFlow

1 个答案:

答案 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); }); }); }); 对象上添加计数器,然后如果找不到则增加此值。

当您需要提高算法效率时,最后一个选项是正常的。