繁体   English   中英

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

[英]Confused about how to get req.body

我似乎无法在服务器上显示身体数据。 我实际上是想在post / put / fetch调用中获取此信息,但是为了解决该问题,我将其简化为一个简单的.get,但它仍然不会出现。 谁能看到为什么服务器上没有显示正文? 因此,我无法以更复杂的方式完成任何事情(例如获取请求的正文,但现在仍坚持这个简单的示例。)

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

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() ,如果我调用以下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。

我认为您在混淆请求和响应对象。 但是除此之外,我将解释在哪里/如何从GET和POST / PUT请求中传递数据。

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

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

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

您的客户呼叫显示了数据,因为您已经通过res.send()将数据发送回了响应。 这与为什么req.body在您的情况下为空对象完全无关。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM