You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:12:47