Menu
CoddyTech

会过期的计数器

本课属于 Coddy Node.js 学习旅程的“身份验证与安全”单元。第 22 课,共 24 课。

固定窗口会从某个起始时间开始统计尝试次数。将 since 与计数一起保存。对于一分钟的窗口,当 now - since 达到 60000 毫秒时,窗口就会过期。

// 这个例子中的时间窗口为 10 秒
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 在线编辑器