为什么axios连续调用6次post方法后就无法正常工作?
问题根因
你遇到的现象是浏览器同域名并发请求限制和Express路由未返回响应共同导致的:
- 首先,Express的POST路由处理逻辑中,不管数据库操作成功/失败,都没有给前端返回任何响应,所有发出去的请求会一直处于
pending挂起状态 - 浏览器对同一个HTTP/1.1域名的并发请求上限默认是6个,前6个请求占满了可用连接后,后续的请求会被浏览器阻塞排队,不会发送到服务端,所以Node控制台不会打印后续的请求日志
代码问题修复
- 修正路由处理逻辑,补充响应返回和异常捕获:
router.post('/pageupdate/:_id',auth, async(req,res)=>{ console.log("received request to update: ",req.body," id ",req.params); try { // 修复filter的取值错误:req.params是对象,需要取其中的_id属性 const filter = { "_id": req.params._id }; const update = { $set: req.body }; // 注意Mongoose的findOneAndUpdate要开启new: true才会返回更新后的文档 let updatedDoc = await Pages.findOneAndUpdate(filter, update, {new: true}) // 给前端返回成功响应 return res.status(200).json({code: 0, data: updatedDoc, msg: '更新成功'}) } catch (err) { // 捕获异常,返回错误响应 console.error('更新失败:', err) return res.status(500).json({code: 1, msg: '更新失败', error: err.message}) } });
- 可选优化:如果你的接口是频繁调用的拖拽坐标同步类接口,建议加防抖处理,避免短时间内发送大量无效请求。
验证方式
修复后再重复操作,就能看到:
- 每次请求都会在React控制台打印返回结果/错误信息
- 后续请求不会再被阻塞,Node控制台可以正常收到所有请求日志
内容的提问来源于stack exchange,提问作者John Shanks
相关产品推荐
相关产品推荐

