Уникальный счетчик посетителей для Express.js

#express #for-loop #unique #counter #visitor-pattern

#экспресс #для цикла #уникальный #счетчик #шаблон посетителя

Вопрос:

Я столкнулся с проблемой, которую я не могу решить. Я буду рад, если вы мне поможете.

Я пишу веб-сайт в стиле блога с node.js . Но я не смог найти способ измерить, сколько людей просмотрели сообщения в блоге.

Я хочу систему, подобную этой;

Когда кто-то заходит на сайт, он будет учитываться как посетитель, и 1 будет добавлен к счетчику.

Когда тот же человек повторно заходит на сайт, на этот раз он не будет считаться посетителем. Число не будет добавлено к счетчику

Комментарии:

1. Чтобы сделать счетчик, который вы можете сделать на стороне вашего сервера index.js запишите переменную счетчика и всегда, когда достигается одна из ваших конечных точек, увеличивайте эту переменную. Для уникальной части вам, вероятно, придется проверить IP-адрес.

2. Я делаю, как вы говорите, но когда пользователь меняет IP-адрес и обновляет страницу, он сохраняет ее снова.

3. Вы имеете в виду, когда он использует vpn? Он не может изменить свой глобальный IP-адрес. Другим решением может быть использование файлов cookie, но по истечении срока действия файла cookie он также будет учитываться снова

4. Итак, как я могу получить глобальный IP-адрес?

5. это должно быть в вашем запросе объекта req.ip

Ответ №1:

Используйте экспресс-счетчик посетителей

 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);
})();