【问题标题】:Can't access the data property of the response in React无法在 React 中访问响应的数据属性
【发布时间】:2022-01-19 22:42:31
【问题描述】:

我有两个页面,注册status。从注册页面,我提交了一个表单,当我收到响应时,我想将它发送到状态页面并访问对象的一些属性。

    const register = (e) => {
    e.preventDefault();

    Axios.post("http://localhost:3001/register", {
        name : name,
        NID : NID,
        birth : birth,
        phone : phone,
        gender : gender,
        center : center,
        address : address
    }).then((response) => {
        console.log(response.data);
        setResponse(response.data.NID);
    });
    e.target.reset();
};

在 MySQL 数据库中每次 post 请求都成功。但是当我控制台记录 response.data 时,我没有得到数据属性。

后端:

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

  const name = req.body.name;
  const NID = req.body.NID;
  const birth = req.body.birth;
  const phone = req.body.phone;
  const gender = req.body.gender;
  const center = req.body.center;
  const address = req.body.address;

  db.query(
    "insert into register (name, NID, birth, phone, gender, center, address) values (?,?,?,?,?,?,?)",
    [name, NID, birth, phone, gender, center, address],
    (err, result) => {
      if (err) {
        res.send(err);
      } else {
        res.send(result);
      }
    }
  );
});

另外,在渲染 {response.data.name} 时出现错误。

【问题讨论】:

  • 这是一个跑题的评论,但是如果您 1) 在客户端上执行 axios 请求时,您可以使代码更简洁:Axios.post("http://localhost:3001/register", { name, NID, etc. -- 如果属性名称相同作为变量,您可以使用速记符号——没有理由像name: name 那样重复。 2)在服务器代码中可以使用对象解构:const { name, NID, etc. } = req.body;
  • 非常感谢您告诉我。

标签: node.js reactjs rest console.log


【解决方案1】:

您的后端返回什么?它只是一个 response.status 201 吗?身体是空的吗? 您应该在 devtools 的 Network 选项卡中检查当您点击该端点时会发生什么。

HTTP 状态码:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

【讨论】:

  • 我添加了后端。当我 console.log 响应时,我无法查看数据属性。它在那里,但它只是 data{...} 如果我控制台记录 response.data 我没有收到作为响应的对象的属性。
【解决方案2】:

您记录的内容是您的服务器作为响应返回的内容。您需要在后端应用程序的响应中返回您需要的内容。因此,不是 res.send(result) 其中result 是数据库查询的结果,而是调用res.send 并使用您想要发送到前端的任何数据。

或者,如果您需要的是请求参数,只需等待请求成功(如您的代码示例中所示)并使用请求参数。 IE。而不是 setResponse(response.data.NID) 使用 setResponse(NID) - 您已经在代码示例中将“NID”作为变量。

【讨论】:

  • 我实际上想在前端发送整个对象,然后访问属性。我关注了这个 repo:github.com/suppaGonzal0/Simple-CRUD-React-Node-MySQL/blob/main/… 它在另一个项目中对我有用,但即使我做了同样的事情,它也不起作用。
  • 什么对象?您的意思是带有{ name, NID ... } 的对象?然后做res.send({ name, NID, birth, phone, gender, center, address })
  • 我可以尝试一下,但在另一个项目中确实如此。你也可以查看 repo。我在后端做了 res.send(result),在前端做了 console.log(response.data),所有属性都显示在控制台选项卡中。为什么在这种情况下它不起作用?
  • 好吧,看起来数据库查询的结果是{ affectedRows: 1, fieldCount: 0, ... },就像在前端记录的那样。您可以通过在res.send(result) 之前在后端执行console.log(result) 来亲自查看响应数据。
猜你喜欢
  • 1970-01-01
  • 2021-10-19
  • 2015-12-14
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
相关资源
最近更新 更多