Express.js无法处理超过6次客户端请求的问题该如何修复?
问题根因
你遇到的现象本质是浏览器对同域名的并发HTTP请求数限制导致的,和Express的配置无关。你的代码存在明显逻辑缺陷:/register/:user 这个POST路由作为异步逻辑,执行完addUser操作后没有主动返回响应、结束HTTP请求,导致每一次调用该接口的请求都会一直处于pending状态,直到浏览器默认超时。
主流浏览器对同域名的并发请求限制大多为6个,因此你连续发起6次未结束的请求后,后续所有同域名请求都会被浏览器阻塞排队;刷新浏览器时所有pending的请求会被主动销毁,限制自然解除,完全符合你描述的现象。
修复方案
不需要调整任何请求数量上限配置,只需要给所有Express路由逻辑都加上响应返回,主动结束请求即可。修改后的接口代码参考:
const app = express(); app.get('/', (req, res) => { res.json(getPost('all')) }) app.post('/register/:user', async (req, res)=>{ try { // 异步逻辑建议加await,避免逻辑异常 await addUser(req.params.user) // 主动返回响应结束请求 return res.status(200).json({ code: 0, msg: '操作成功' }) } catch (err) { // 异常场景也必须返回响应,避免请求挂起 return res.status(500).json({ code: 1, msg: '操作失败' }) } })
注意事项
- 所有Express路由逻辑,不管是成功还是异常分支,都必须确保调用了
res.send()/res.json()/res.end()这类结束请求的方法,否则请求会一直挂在服务端和浏览器两端,占用请求连接数。 - 若使用了异步逻辑,必须做好异常捕获,避免异常抛出后没有走到返回响应的逻辑分支。
内容的提问来源于stack exchange,提问作者happy_story
相关产品推荐
相关产品推荐

