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

React前端提交表单至Node.js后端,后端无法接收数据的解决咨询

问题:Node.js后端无法接收React表单提交的数据

问题代码

Node.js 服务端代码

app.post('/create-checkout-session', (req,res) =>{
  console.log(req.form);
  console.log(req.body);
  const session = await stripe.checkout.sessions.create({
    line_items: [
      {
        price: "price_id",
        quantity: 1,
      },
    ],
    metadata: {
      id: 1,
      email: "soubhagya",
    },
    mode: "payment",
    success_url: `https://www.youtube.com/?success=true`,
    cancel_url: `https://www.youtube.com/?canceled=true`,
  });

  res.redirect(303, session.url);
})

React 前端代码

<form
    action="http://localhost:4000/create-checkout-session"
    method="POST"
>
  <input
    type="text"
    name="user"
    value="hellowowowowowo"
    disabled
  />
  <button
    type="submit"
    className="w-32 text-white bg-primary-purple hover:bg-primary-700 font-medium rounded-sm text-sm p-4 xs:w-full"
  >
    GET STARTED
  </button>
</form>

解决方法

1. 配置表单解析中间件

Express框架默认不会解析表单提交的数据,需要添加express.urlencoded()中间件处理application/x-www-form-urlencoded格式的请求,在应用初始化代码中加入:

const express = require('express');
const app = express();

// 解析表单数据
app.use(express.urlencoded({ extended: true }));

2. 修复前端禁用的输入框

带有disabled属性的表单元素不会被提交,若需要传递该字段值,将disabled替换为readOnly:

<input
  type="text"
  name="user"
  value="hellowowowowowo"
  readOnly
/>

3. 修复服务端async/await语法问题

服务端代码中使用了await但回调函数未标记为async,会触发语法错误,同时建议添加错误捕获:

app.post('/create-checkout-session', async (req,res) =>{
  console.log(req.body); // 现在可正常获取表单数据
  try {
    const session = await stripe.checkout.sessions.create({
      line_items: [
        {
          price: "price_id",
          quantity: 1,
        },
      ],
      metadata: {
        id: 1,
        email: req.body.user, // 可直接使用表单传递的user值
      },
      mode: "payment",
      success_url: `https://www.youtube.com/?success=true`,
      cancel_url: `https://www.youtube.com/?canceled=true`,
    });

    res.redirect(303, session.url);
  } catch (error) {
    res.status(500).send(error.message);
  }
})

验证

完成上述修改后,提交表单时后端的console.log(req.body)会输出{ user: 'hellowowowowowo' },即可正常接收表单数据。

内容的提问来源于stack exchange,提问作者Kiran S youtube channel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:55:19