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

React+Node.js+MySQL表单提交字段全为NULL报错求助

解决React+Node.js+MySQL插入数据时字段为NULL的问题

你的问题核心是前后端传递的参数键名不匹配,导致后端无法正确获取前端表单输入值,最终向数据库插入NULL,触发了非空字段的约束错误。以下是具体修复方案:


1. 对齐前后端参数键名(推荐方案)

前端Axios发送的参数键必须和后端接收的键完全一致,否则后端会拿到undefined,最终SQL插入时转为NULL。

修改前端App.js的请求参数

将Axios请求的参数键名改为后端期望的employeeName、employeeAge、employeePosition、employeeSalary,同时添加错误捕获方便调试:

const submitData = () => {
  // 先做表单非空校验,避免无效请求
  if (!employeeName || !employeeAge || !employeePosition || !employeeSalary) {
    alert('请填写所有必填字段');
    return;
  }

  Axios.post('http://localhost:3001/api/insert', {
    employeeName: employeeName, 
    employeeAge: employeeAge, 
    employeePosition: employeePosition, 
    employeeSalary: employeeSalary
  }).then(()=>{
    alert('Berhasil')
  }).catch(err => {
    console.error('提交失败:', err);
    alert('提交失败,请查看控制台日志')
  })
}

(可选)修改后端接收逻辑

如果不想改动前端,也可以让后端对齐前端发送的键名(注意前端position是小写,需统一):

app.post("/api/insert", (req, res) => {
    const Name = req.body.Name
    const Age = req.body.Age
    const Position = req.body.position // 匹配前端的小写position
    const Salary = req.body.Salary

    const sqlInsert = "INSERT INTO employee (Name, Age, Position, Salary) VALUES (?,?,?,?)"
    db.query(sqlInsert, [Name, Age, Position, Salary], (err, result)=>{
        if(err) {
            console.log(err);
            res.status(500).send('数据插入失败');
        } else {
            res.status(200).send('数据插入成功');
        }
    });
})

2. 额外优化建议

  • 统一命名规范:前后端参数命名保持一致,比如全用驼峰式(employeeName)或下划线式(employee_name),避免大小写、命名方式不一致的问题。
  • 后端响应反馈:不要只在控制台打印错误,需向前端返回明确的状态码和提示信息,方便前端处理结果。
  • 表单验证增强:可以在输入框添加必填标记,或使用React表单库(如Formik)做更严谨的校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:54:36