JS/React调用Express接口时body含参但字段为undefined问题咨询
问题排查及解决方案
核心问题原因
JavaScript 对象属性名大小写敏感,你前后端传递的参数属性名大小写不匹配:
- 前端 diary.js 中构造的请求 payload 是
{ Description: diaryText },属性名首字母为大写D - 后端 api.js 中解构取值用的是
const {description} = req.body,属性名首字母为小写d
因此后端解构拿到的description必然是 undefined,调用split方法时就抛出了类型错误。
修复方案(二选一即可)
- 方案1:修改后端取值代码,和前端传参的属性名对齐
把 api.js 里的解构代码改为:
或者直接取值:const { Description: description } = req.body;const description = req.body.Description; - 方案2:修改前端传参代码,和后端取值的属性名对齐
把 diary.js 里的 payload 构造代码改为:let payload = { description: diaryText };
其他附带问题修复
还有两处代码缺陷可以同步修正,避免后续出现其他异常:
- 后端响应格式错误
res.json()方法会自动将传入的对象序列化为JSON字符串,不需要额外嵌套JSON.stringify,否则会返回双重序列化的字符串,前端需要二次解析才能拿到数据。把 api.js 中的响应代码改为:
res.json({sentiment})
- 前端错误捕获逻辑错误
当前请求错误的捕获写法是错误的,.then无法捕获前序链抛出的异常,需要把最后一个.then改为.catch,同时做兼容判断避免空值报错:
makePostRequest("testText").then(response => { console.log("Data returned from the function call:", response); }).catch(error => { console.error(error?.response?.data || error.message); });
内容的提问来源于stack exchange,提问作者Davospike
相关产品推荐
相关产品推荐

