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

标签 javascript node.js reactjs express

我似乎无法在我的服务器上显示 body 数据。我实际上试图在 post/put/fetch 调用中获取它,但为了解决这个问题,我将它归结为一个简单的 .get,但它仍然不会出现。任何人都可以看到为什么 body 没有显示在服务器上吗?由于这个原因,我无法在更复杂的调用中完成任何事情(比如获取请求的主体,但现在坚持这个简单的例子。)

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

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

在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;
};

使用 Node 9 并表达 4。

最佳答案

我认为您混淆了请求和响应对象。但除此之外,我将解释从何处/如何获取从 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' }

关于javascript - 对如何获取 req.body 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48434677/

相关文章:

javascript - 获取从日期选择器中选择的输入的 React 状态

javascript - 闭包编译器 : could not determine the type of this expression at callback

javascript - 如何将html网页截屏并作为图像发送到邮件

javascript - 在另一个函数中使用javascript中的按钮停止倒计时

php - 如何创建从 nodejs mysql 模块获取的正确的 json 类型数据?

javascript - 在 npm3 中使用 devDependencies 满足 peerDependencies

node.js - Node : Set highWaterMark of socket object

reactjs - 基于通配符路由的 Esri-arcgis 请求拦截

javascript - Angular 2 RC6 PrimeNG p-dropdown 未从组件中禁用

javascript - 捕获传入路由并在登录后重定向回来