使用express-rate-limit触发限流时出现JSON解析错误的解决问询
问题解决方法
问题核心原因:触发限流规则时,express-rate-limit返回纯文本格式的错误信息,但你的客户端代码尝试将响应解析为JSON,导致解析失败抛出语法错误。
修改服务端配置(推荐方案)
将message参数从字符串改为JSON对象,express-rate-limit会自动把响应的Content-Type设为application/json,客户端就能正常解析:
const addLikeLimiter = rateLimit({ windowMs: 1000, // 1秒 max: 1, // 每秒限制1次点赞 message: { error: 'You can like once per second.' }, standardHeaders: true, // 在响应头返回限流信息 legacyHeaders: false, // 禁用旧版限流响应头 }) app.use('/api/like', addLikeLimiter)
备选:修改客户端处理逻辑
如果无法调整服务端配置,可在客户端处理429响应时,先判断响应类型,纯文本直接读取内容,不做JSON解析。示例(基于fetch):
fetch('/api/like', { method: 'POST' }) .then(async res => { if (res.status === 429) { const errorText = await res.text(); // 处理纯文本错误信息,比如提示用户 alert(errorText); return; } // 正常场景解析JSON const data = await res.json(); // 后续业务逻辑 }) .catch(err => console.error(err));
内容的提问来源于stack exchange,提问作者Scollier
相关产品推荐
相关产品推荐

