Axios并发请求响应异常求助:返回值为undefined
问题分析与解决方案
一、服务器端代码错误
你的/todos路由存在变量名不匹配问题,会导致服务器抛出ReferenceError,无法正常返回响应:
- 解构获取的是
req.body.todos,但push时使用了未定义的变量todo - 客户端传入的是
todo字段,解构时需对应匹配
修正后的服务器端/todos路由代码:
app.post("/todos", (req, res) => { const { todo } = req.body; users.todos.push(todo); console.log(users); return res.json(users); });
二、客户端代码错误
1. Axios请求参数结构错误
axios.post的参数格式为axios.post(url, data, config),你把请求体数据和headers配置混在同一个对象里,导致请求体包含多余的headers字段,且headers未正确生效。
2. Axios.all响应处理错误
axios.all返回的是响应对象数组,每个元素是包含data属性的AxiosResponse对象,不能直接解构{data1, data2},需用数组解构获取每个响应后再提取data。
3. 对象拼接方式错误
用+拼接对象会将其转为字符串(正常情况结果为[object Object][object Object],响应异常时则为undefinedundefined),应使用对象合并方式处理结果。
修正后的客户端代码:
// 分离请求体数据与headers配置 const userData = { id: id }; const todoData = { todo: "ToDo" }; const config = { headers: { "Content-Type": "application/json;charset=utf-8" } }; const req1 = axios.post(`${url}/user`, userData, config); const req2 = axios.post(`${url}/todos`, todoData, config); try { // 数组解构获取两个响应对象 const [res1, res2] = await axios.all([req1, req2]); const data1 = res1.data; const data2 = res2.data; // 合并响应数据(可根据需求调整合并逻辑) const combinedData = { ...data1, ...data2 }; console.log("concatenated data:", combinedData); return res.json(combinedData); } catch (error) { console.error(error); }
三、额外说明
- 确保Node.js服务器已配置
express.json()中间件(需在路由前添加app.use(express.json());),才能正确解析JSON格式请求体 - 服务器端的
users是全局对象,多次请求会修改同一对象,测试时注意重置数据状态
内容的提问来源于stack exchange,提问作者Juan J
相关产品推荐
相关产品推荐

