#javascript #node.js
Вопрос:
У меня есть такой маршрут для выполнения функции:
router.post('/send-verification-again', sendVerificationAgain);
В приведенной выше функции у нас есть адрес электронной почты или номер телефона учетной записи, которую мы хотим подтвердить.
Это выполнит функцию отправки электронной почты или sms пользователю с его/ее проверочным кодом, хорошо?
Очевидно, мы не хотим, чтобы пользователь мог отправлять более одного запроса в минуту по этому маршруту, верно?
Как я могу ограничить выполнение функции для указанного пользователя одним в минуту?
function sendVerificationAgain(email) {
// for each specific email here the function can be executed one time per minute
}
Это очень распространенная функциональность, существует ли какое-либо соглашение для этого?
Комментарии:
1. Хороший ответ Кельвина ниже. Вы также можете ознакомиться с такими библиотеками, как: npmjs.com/package/express-rate-limit
Ответ №1:
Вы можете просто сохранить электронное письмо на минуту и проверить, сохранено ли оно:
const recentlySent = new Set();
function sendVerificationAgain(email) {
if (recentlySent.has(email)) return;
recentlySent.add(email);
setTimeout(() => recentlySent.delete(email), 60e3);
// ...
}
Вы также можете сначала нормализовать электронное письмо, например, в нижнем регистре.
Для получения дополнительной информации посмотрите «debounce» в программном смысле