会过期的计数器
本课属于 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 } 记录。
挑战
简单在 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 在线编辑器