#javascript #node.js #mongodb #voting-system
#javascript #node.js #mongodb #система голосования
Вопрос:
Я использую базу данных MongoDB и node.js в качестве серверной части. Я хочу внедрить систему голосования, в которой пользователь после входа на мой сайт может голосовать за определенные вещи. Но я хочу убедиться, что они могут делать только один голос в день. Как я могу это реализовать?
Возможное решение, о котором я подумал:-
Сохраните последнюю временную метку голосования, а затем проверьте, когда он попытается проголосовать снова, прошел день или нет. Но это не идеально, поскольку это означает, что между двумя голосами должен быть промежуток в 24 часа, независимо от времени суток, в которое он голосует.
Может ли кто-нибудь предложить что-то лучшее, чем я могу реализовать в node.js а MongoDB?
Заранее спасибо.
Комментарии:
1. «Сохраните последнюю временную метку голосования, а затем проверьте, когда он попытается проголосовать снова, прошел день или нет». Если вы сохраняете временную метку, вы, конечно, можете сравнить, есть ли разница более чем в 24 часа с текущим временем.
2. Да, но предположим, что он открывается для голосования в 10 утра каждый день, но если однажды он задержится на 10 минут, то весь следующий день ему придется делать задержку на 10 минут.
Ответ №1:
Я бы использовал Redis с ttl для этого, и в промежуточном программном обеспечении я бы проверил, проголосовал ли пользователь уже (существует в Redis). Но если вы не используете Redis, вы также можете использовать TTL в MongoDB, поэтому я создаю для этого схему и проверяю каждый запрос в промежуточном программном обеспечении.
Комментарии:
1. Я бы не стал добавлять для этого еще одну инфраструктуру. Кроме того, почему промежуточное программное обеспечение? Было бы достаточно проверить непосредственно перед сохранением нового голосования…
2. Я не знаю, как он реализует систему голосования, если он использует несколько маршрутов /? как вы можете быть так уверены?
3. Это простое приложение, в нем всего несколько API. Я не использую Redis, и я мало что знаю о TTL. Можете ли вы проинформировать меня об этом? Извините, я новичок.