Menu
CoddyTech

统计失败次数

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

登录限流器需要跨请求记住失败次数。Map 会根据键存储值。将每个用户名用作键,这样一个账户的失败次数就不会影响其他账户。

const counts = new Map();
const old = counts.get('bo') ?? 0;
counts.set('bo', old + 1);

counts.get(key)在键不存在时会返回 undefined,因此备用值会让计数从零开始。将 Map 放在请求函数外部,这样服务器运行期间就能保留它。此练习中的每个请求都代表一次失败尝试。过期处理会作为单独的步骤实现;目前,这个 Map 会持续计数,直到点击“运行”重启服务器。

challenge icon

挑战

简单

这是一个小型练习项目。项目已提供配置,只编辑 exercise.js。

为提供的用户名递增计数,并将其返回到 count 中。向 /result 发送两次 POST 请求,数据为 {"username":"ada"}:计数依次为 1 和 2。发送 bo 会得到 1;再次发送 ada 会得到 3。

自己创建 Map,并将它放在合适的位置,这样第二个请求就能读取第一个计数。再次按“运行”会重启服务器并清空这个内存存储。

亲手试试

// 创建一个能在多次请求之间保留数据的计数存储。
export function exercise({ username }) {
    return { count: 0 };
}

身份验证与安全中的所有课

自己练习: Express 在线编辑器