Menu
CoddyTech

Счётчик с истечением срока

Часть раздела Аутентификация и безопасность путешествия по Node.js на Coddy. Урок 22 из 24.

Фиксированное окно отсчитывает попытки от одного момента начала. Храни since рядом со счётчиком. Для окна длительностью одна минута оно истекает, когда now - since достигает 60000 миллисекунд.

// Десятисекундный интервал в этом примере
if (now - since >= 10000) {
    count = 0;
    since = now;
}
count += 1;

В пределах окна сохраняй исходное время его начала. Если обновлять его после каждой попытки, ожидание будет постоянно продлеваться. В этом упражнении используется now, чтобы ты мог проверить границу, не дожидаясь её наступления. Работающий сервер получает текущее время с помощью Date.now(). В проекте входа используется та же запись { count, since }.

challenge icon

Задание

Легко

Обнови запись о сбоях за одну минуту в exercise.js. Если now - since больше или равно 60000, начни новое окно с now и счётчиком 1. В противном случае увеличь счётчик и оставь since без изменений. Верни оба поля.

Для POST {"count":3,"since":0,"now":10000} ожидается {"count":4,"since":0}. При now:60000 ожидается {"count":1,"since":60000}.

Для первоначального GET /result используется предоставленный пример {"count": 2, "since": 1000, "now": 61000}. Используй POST /result с телом в формате JSON, чтобы проверить другие входные данные.

Попробуйте сами

export function exercise({ count, since, now }) {
    return { count: count + 1, since };
}

Все уроки раздела Аутентификация и безопасность

Потренируйтесь самостоятельно: Песочница Express