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

React对接Node.js:注册表单提交后字段全为Undefined问题排查

问题分析与解决:POST请求字段全为undefined的原因

你的代码里有两个核心问题导致所有字段变成undefined,下面逐一说明并给出修复方案:

1. 前端请求的Content-Type头部错误

在fetch请求的headers配置中,你错误地写了'Content-type': 'application.json',正确的MIME类型应该是application/json(注意斜杠和首字母大写的Type)。这个错误会让后端的body-parser无法正确识别并解析请求体的JSON数据,最终导致req.body所有字段为undefined。

修复后的前端fetch代码:

fetch('http://localhost:8000/users_api', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json' // 修正Content-Type格式
    },
    body: JSON.stringify(state)
})
.then(res => res.json())
.then(data => console.log('返回数据:', data)) // 新增日志查看返回结果
.catch(err => console.error('请求错误:', err)) // 捕获请求异常

2. 后端CORS配置未允许POST方法

你的CORS中间件只允许了GET方法:res.setHeader('Access-Control-Allow-Methods', 'GET');,但注册请求是POST类型,浏览器会先发送OPTIONS预检请求,这个配置会导致预检失败,虽然你说用户能创建,但实际上请求可能没有被正确处理,属于浏览器异常兼容情况。

修复后的后端CORS配置:

app.use(function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST'); // 添加POST方法
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type'); // 修正Header名称
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});

额外优化点

  • 后端代码中res.setHeader('users', users)这行无效,HTTP响应头无法直接传递数组对象,建议删除这行,你的res.send({users: users})已经正确返回了用户数据。
  • 前端submit函数中使用的usernameError、emailError等变量未定义,会导致条件判断出错,需要补充这些错误状态的定义(比如用useState声明),否则可能会意外阻止请求发送。

修复以上两个核心问题后,后端就能正确解析前端发送的JSON数据,req.body中的字段会正常取值,返回给前端的用户数据也不会再是undefined。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:30:29