【问题标题】:Trying to pass data from react(front end) to node server(backend)试图将数据从反应(前端)传递到节点服务器(后端)
【发布时间】:2023-03-29 23:27:01
【问题描述】:

我正在尝试将来自我的反应端的数据从我的 onSubmit 函数传递到我的节点/快递服务器。

数据没有显示在控制台和页面上,因为它只是说“未定义”有人可以帮我吗?谢谢!

App.js 文件

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      generalDetails: "Text",
      fName: "Text",
      mName: "Text",
      LName: "Text",
      gender: "Text"
    };

    this.onContentChange = this.onContentChange.bind(this);
    this.onSubmitForm = this.onSubmitForm.bind(this);
  }

  render() {
    return (
      <div className="App">
        <PageOne handleChange={this.onContentChange} />
        <PageTwo handleChange={this.onContentChange} />
        <PageThree handleChange={this.onContentChange} />
        <PageFour handleChange={this.onContentChange} />
        <PageFive handleChange={this.onContentChange} />
        <PageSix handleChange={this.onContentChange} />

        <Button onClick={this.onSubmitForm}>Submit Form</Button>

        <br />
        <br />
      </div>
    );
  }

  onSubmitForm = e => {
    e.preventDefault();
    let data = {
      generalDetails: this.state.generalDetails,
      firstName: this.state.firstName,
      middleName: this.state.middleName,
      lastName: this.state.lastName
    };

    axios
      .post("http://localhost:5000/home", data)
      .then(() => {
        //do something
      })
      .catch(() => {
        console.log("Something went wrong. Please try again later");
      });


  onContentChange(fieldname, data) {
    console.log("On Content Change", data);

    this.setState({
      [fieldname]: data
    });
  }
}

export default App;

服务器

const express = require("express");
const app = express();
const port = 5000;

const cors = require("cors");
app.use(cors());
var bodyParser = require("body-parser");
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(
  bodyParser.urlencoded({
    // to support URL-encoded bodies
    extended: true
  })
);

app.get("/home", (req, res) => {
    console.log("Hello from .get /home", req.body.generalDetails );

})




app.post("/home", (req, res) => {

  const data = [{ generalDetails: req.body.generalDetails }];


  res.json(data);
});

app.listen(port, () => `Server running on port ${port}`);

【问题讨论】:

  • 你在哪里 console.log() 数据?

标签: node.js reactjs express


【解决方案1】:

你的问题很模糊,所以我会尽力通过查看你的代码来回答。你从哪里得到未定义的?您在哪里尝试登录控制台?您是否在浏览器控制台和/或节点控制台中遇到任何错误?这些是我对您的问题的疑问,但这是我认为您的问题所在。

如果您尝试从前端发送获取请求并尝试在

app.get("/home", (req, res) => {
  console.log("Hello from .get /home", req.body.generalDetails );
})

那么您需要从前端发送获取请求,而不是发布请求。现在您的 axios 函数正在发出一个 post 请求,因此它将在您的后端通过 post 路由而不是 get 路由接收。

如果您尝试做的是发出发布请求,那么您将在发布路线上收到它,而您的代码现在所做的就是将 generalDetials 发回。问题是您有一个空函数从服务器接收请求。无论您是发布帖子还是获取请求,您都需要对这些信息进行处理。

所以请执行以下操作,以便您了解正在发生的事情。发出 post 请求,然后将响应记录到浏览器控制台:

axios
  .post("http://localhost:5000/home", data)
  .then(result => {
    console.log(result)
  })
  .catch(() => {
    console.log("Something went wrong. Please try again later");
  });

如果您在 axios 数据中获取了一般详细信息,那么您就成功地发出了发布请求。

然后发出一个get请求:

axios
  .get("http://localhost:5000/home", data)
  .then(result => {
    console.log(result)
  })
  .catch(() => {
    console.log("Something went wrong. Please try again later");
  });

如果您在节点控制台中记录信息,那么您将成功发出获取请求。因为在您的后端,您只能在 get 路由中登录到控制台。

此外,您似乎有语法错误。您忘记关闭 onSubmitForm 函数。您缺少右大括号。

【讨论】:

  • 一个模糊问题的好答案。
  • 谢谢!这行得通。抱歉,我的反应太模糊了,但是问题会随着时间的推移而改善。希望。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 2017-11-24
  • 1970-01-01
相关资源
最近更新 更多