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

React中通过onClick事件传递price数据至MongoDB异常:仅存储Date与Id的问题求助

解决React中通过Axios传递price数据到MongoDB的问题

看起来你的后端已经能正常处理请求(Postman测试通过),问题出在React前端发送数据的格式上。目前你直接把props.price作为请求体发送,但后端大概率期望接收一个包含price字段的对象,而不是单纯的数值,这就导致数据库里只生成了默认的_id和Date字段,没有存储你要的price数据。

下面是具体的修复方案:


步骤1:调整请求体格式,将price包装为对象

修改你的handlePayment函数,把要发送的price放到一个对象里,确保后端能识别对应的字段:

import axios from "axios";
const Package = (props) => {
  // 改用async/await处理异步请求,同时包装数据为对象
  const handlePayment = async (price) => {
    try {
      // 把price包装成后端期望的对象结构(这里假设后端接收{ price: xxx })
      const requestData = { price: price };
      const result = await axios.post("http://localhost:3000/pay", requestData);
      console.log("数据提交成功:", result.data);
    } catch (error) {
      console.error("提交失败:", error);
    }
  };

  return (
    <>
      <div className="col-lg-4 col-md-6 col-sm-10 pb-4 d-block m-auto">
        <div className="pricing-item">
          <div className="pt-4 pb-3">
            <h4>{props.name}</h4>
          </div>
          <div className="pricing-price pb-1 text-primary color-primary-text ">
            <h1>
              <span>{props.price}</span>
            </h1>
          </div>
          <div className="pricing-description">
            <ul className="list-unstyled mt-3 mb-4"></ul>
          </div>
          <div className="pricing-button pb-4">
            <button 
              onClick={() => handlePayment(props.price)} 
              type="button" 
              className="btn btn-lg btn-primary w-75"
            >
              Buy
            </button>
          </div>
        </div>
      </div>
    </>
  );
};

关键修改点说明:

  • 包装请求体:将单纯的price数值放到{ price: price }对象中,这样后端就能正确解析到price字段并存储到MongoDB。
  • 异步请求处理:使用async/await(或者.then())处理axios的异步请求,避免控制台打印的是未完成的Promise对象,同时能更好地处理成功/失败的情况。
  • 错误捕获:添加try/catch块,方便排查请求失败的原因(比如跨域、后端报错等)。

额外验证建议

如果不确定后端期望的请求体格式,可以对照Postman里成功的请求:

打开Postman的成功请求,查看Body部分的结构,确保React发送的请求体和它完全一致。比如Postman里如果是{"price": 99},那React也要发送相同结构的对象。

这样修改后,你的price数据应该就能正确存储到MongoDB里了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:22:36