【问题标题】:Unique visitor counter for Express.jsExpress.js 的唯一访客计数器
【发布时间】:2021-01-06 10:26:22
【问题描述】:

我遇到了一个我无法解决的问题。如果你能帮助我,我会很高兴。

我正在用 node.js 写一个博客风格的网站。但我找不到一种方法来衡量有多少人查看了博客文章。

我想要这样的系统;

当有人进入网站时,他们将被计为访问者,并在计数器中添加 1。

当同一个人重新进入网站时,这一次她不会算作访问者。号码不会添加到计数器中

【问题讨论】:

  • 要执行计数器,您可以在服务器端 index.js 文件中执行计数器变量,并且始终在到达某个端点时增加此变量。对于独特的部分,您可能必须检查 IP 地址。
  • 照你说的做,但是当用户更改IP地址刷新页面时,又保存了一次。
  • 你是说他用vpn的时候?他无法更改其全球 IP 地址。另一种解决方案可能是使用 cookie,但当 cookie 过期时,它也会再次计数
  • 那么如何获取全局ip地址呢?
  • 它应该在你的请求对象req.ip中

标签: express for-loop unique counter visitor-pattern


【解决方案1】:

使用express-visitor-counter...

const express = require('express');
const expressSession = require('express-session');
const expressVisitorCounter = require('express-visitor-counter');
const MongoClient = require('mongodb').MongoClient;

(async () => {
  const dbConnection = await MongoClient.connect('mongodb://localhost/test', { useUnifiedTopology: true });
  const counters = dbConnection.db().collection('counters');

  const app = express();
  app.enable('trust proxy');
  app.use(expressSession({ secret: 'secret', resave: false, saveUninitialized: true }));
  app.use(expressVisitorCounter({ collection: counters }));
  app.get('/', async (req, res, next) => res.json(await counters.find().toArray()));
  app.listen(8080);
})();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2020-10-13
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多