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

Axios传参至Express API时布尔值变字符串且参数undefined问题

问题原因及解决方案

1. questionAsked 返回 undefined 的核心原因

你在React端使用Axios发送POST请求时,错误地将请求体数据嵌套在了params字段中。Axios的params属性是用来拼接URL查询参数的(比如GET请求的?key=value结构),而POST请求的请求体数据应该直接作为第二个参数传入,不需要嵌套在params对象里。这就导致Express端从req.body中完全拿不到questionAsked数据,自然返回undefined。

2. isCorrect 类型从 boolean 变为 string 的原因

这是你之前使用GET请求遗留的问题:GET请求的所有参数都会被序列化为URL字符串,布尔值true/false会被强制转换为字符串"true"/"false"。后来切换到POST但未修正参数结构,数据仍然通过URL参数传递,所以类型问题没有解决。

修复步骤

第一步:修正React端Axios请求代码

移除嵌套的params,直接将数据作为POST请求体发送:

const [APIResonse, setAPIResponse] = useState<number>(0);
const sendAnswersAndTime = async (): Promise<void> => {
  try {
    // 直接传递数据对象作为请求体,无需params嵌套
    const response = await axios.post("http://localhost:3000/updateAnswers", {
      username: "1234",
      questionAsked: questionsAsked,
    });
    const { data } = response;
    setAPIResponse(data);
  } catch (error) {
    console.log(error);
  }
};
useEffect(() => {
  sendAnswersAndTime();
}, []);

第二步:确认Express端中间件配置

你已经添加了express.json()中间件,确保它在路由定义之前即可(你的代码顺序已经正确),这样Express才能正确解析JSON格式的请求体。

验证效果

修改完成后,Express端的req.body.questionAsked可以正常获取到数据,同时isCorrect的布尔类型会被正确保留——因为POST请求的JSON请求体支持布尔、数字等原生类型,不会像URL参数那样强制转换为字符串。

为什么之前的尝试无效?

  • JSON.stringify/JSON.parse没用:因为你处理的是错误的参数对象(嵌套在params里的内容根本没进入请求体),自然无法解决问题。
  • 切换POST后应用崩溃:大概率是当时未修正参数结构,导致请求体格式错误,触发了未捕获的异常。

内容的提问来源于stack exchange,提问作者javaloaf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:25:24