对如何获取 req.body 感到困惑

IT技术 javascript node.js reactjs express
2021-04-29 06:08:02

我似乎无法在我的服务器上显示正文数据。我实际上是想在 post/put/fetch 调用中得到这个,但为了解决这个问题,我把它归结为一个简单的 .get,但它仍然不会出现。谁能看出为什么身体没有显示在服务器上?由于这个原因,我无法在更复杂的调用中完成任何事情(比如获取 req 的主体,但现在坚持这个简单的例子。)

这段代码完全正常工作并发送数据,只是似乎无法访问服务器上的正文。

服务器.js

const express = require('express');
const app = express();
var bodyParser = require('body-parser');

app.use(bodyParser.json());
const port = process.env.PORT || 8000;

const Cat = require('./Cat');
const Dog = require('./Dog');

app.route('/animals')
  .get(function (req, res)  {
    console.log(req.body, 'req.body log'); //this returns {}
    res.send({ Cat, Dog });
  })

app.listen(port, () => console.log(`Listening on port ${port}`));

在react中,如果我调用下面的callApi()函数,console.log在前端显示body数据就好了,页面上可以使用这些数据。

客户电话

callApi = async () => {
  const response = await fetch('/animals');
  const body = await response.json();
  console.log(body) //shows all the data just fine!

  if (response.status !== 200) throw Error(body.message);

  return body;
};

使用节点 9 并表达 4。

1个回答

我认为您混淆了请求和响应对象。但除此之外,我将解释从哪里/如何获取从 GET 和 POST/PUT 请求传入的数据。

当发出 GET 请求时,您可以通过查询参数(即 /animals?type=cat)将数据传递给服务器。这些参数将在一个名为 的对象中解析后可用req.query

当发出 POST 或 PUT 请求,并且您已应用正文解析中间件(您已完成)时,JSON 将作为req.body.

在您的示例中,您发出了 GET 请求,但未提供任何查询字符串参数。Soreq.body将返回一个空对象,就像req.query.

您的客户端调用显示数据,因为您已通过res.send(). 这与为什么req.body在您的情况下为空对象完全无关

尝试fetch('/animals?type=cat')在您的客户电话中使用。然后,您将看到req.query返回{ type: 'cat' }.