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

React通过action方法向Express提交表单数据,req.body为空排查

问题:React表单通过action/method提交后,Express端req.body为空对象

核心原因

你的React表单中的<input>元素缺少name属性。原生HTML表单提交时,只有带有name属性的表单控件,其数据才会被包含在请求体中传递给后端。没有name标识的话,表单数据不会被打包,导致Express端接收的req.body为空对象。

解决方案

给每个输入框添加与id对应的name属性,修改后的React Login组件代码如下:

import {useState} from "react";

const Login = () => {
  const [username, setUsername] = useState("");
  const [password, setPassword] = useState("");
  return (
    <>
      <form
        className="login"
        action="http://localhost:3000/login"
        method="POST"
      >
        <h2>Login</h2>
        <label htmlFor="username">Username</label>
        <input
          id="username"
          name="username" {/* 新增name属性 */}
          type="text"
          placeholder="username"
          onChange={(e) => setUsername(e.target.value)}
          value={username}
        />
        <label htmlFor="password">Password</label>
        <input
          type="password"
          placeholder="password"
          onChange={(e) => setPassword(e.target.value)}
          id="password"
          name="password" {/* 新增name属性 */}
          value={password}
        />
        <button>Login</button>
      </form>
    </>
  );
};

export default Login;

验证说明

你的Express后端已经正确配置了express.urlencoded({extended: true})中间件,该中间件专门用于解析原生表单提交的application/x-www-form-urlencoded格式数据。补上name属性后,表单提交时会自动把username和password的键值对打包进请求体,此时后端的req.body就能正常获取到提交的数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:05:06