如何解决Node.js中Recaptcha聚合超时错误
修复Recaptcha v3验证10分钟后出现的聚合超时问题
你的问题核心出在三个关键环节:
- 依赖的
request库已停止维护,长时间运行后易出现连接池泄漏、请求挂起等稳定性问题 - 未设置验证请求的超时时间,一旦谷歌验证服务响应缓慢,请求会一直处于等待状态,最终触发聚合超时
- 谷歌官方推荐用POST请求验证Recaptcha Token,当前GET拼接参数的方式不符合规范,还存在潜在的参数长度限制风险
修复步骤
1. 替换为维护中的HTTP库(以axios为例)
先安装axios:
npm install axios
2. 重构验证代码,添加超时与异常处理
替换原验证代码为以下实现:
const axios = require('axios'); try { // 用POST请求发送验证,设置10秒超时阈值 const response = await axios.post('https://www.google.com/recaptcha/api/siteverify', null, { params: { secret: process.env.LOGIN_RECAPTCHA_KEY, response: req.body.recaptcha }, timeout: 10000 // 10秒超时,避免请求无限挂起 }); const { success, error_codes } = response.data; if (success) { delete req.body.recaptcha; console.log("Captcha Verification Successful"); next(); } else { console.error("Recaptcha验证失败,错误码:", error_codes); return next(new AppError("验证码验证失败", 400)); } } catch (error) { // 捕获超时、网络错误等异常 console.error("Recaptcha验证请求异常:", error.message); return next(new AppError("验证码验证服务暂时不可用,请稍后重试", 503)); }
3. 额外优化建议
- 给验证请求添加1-2次重试机制,提升网络波动场景下的容错性
- 监控Recaptcha验证的成功率和响应时间,及时排查服务端或网络问题
- 确认服务器网络可正常访问谷歌验证服务,避免防火墙或代理阻断连接
内容的提问来源于stack exchange,提问作者Muhammad Shehryar
相关产品推荐
相关产品推荐

