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