我似乎无法获取服务器上显示的正文数据。我实际上是想在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。
答案 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' }
。