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

时间:2018-01-25 02:25:09

标签: javascript node.js reactjs express

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

此代码完全正常并发送数据,似乎无法访问服务器上的正文。

server.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}`));

在反应中,如果我调用以下callApi()函数,console.log会在前端显示正常的正文数据,并且可以在页面上使用数据。

客户电话

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 个答案:

答案 0 :(得分:2)

我认为你混淆了请求和响应对象。但除此之外,我将解释从GET和POST / PUT请求传入数据的位置/方式。

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

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

在您的示例中,您已发出GET请求,并且未提供任何查询字符串参数。因此req.body将返回一个空对象,req.query也会返回。

您的客户来电显示数据,因为您已通过res.send()在回复中发回了数据。这与req.body在您的情况下为空对象的原因完全无关。

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