我当前正在使用express来处理POST请求,但是当我使用node-fetch进行POST时,我会发送一个正文,然后我console.log()在express中收到的正文(服务器代码)。我得到一个空物体。不知道为什么会这样,我将在下面包含我的代码。
服务器代码
const express = require('express');
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
// GET method route
app.get('/api/getHeartCount', function (req, res) {
res.send('GET request')
});
// POST method route
app.post('/api/sendHeart', function (req, res) {
res.sendStatus(200);
let fBody = JSON.stringify(req.body);
console.log("Got body: " + fBody); // When this is run, I get this in the console: Got body: {}
});
app.listen(3000);
POST请求代码
const fetch = require("node-fetch");
(async () => {
const body = { heartCount: 1 };
const response = await fetch('http://localhost:3000/api/sendHeart', {
method: "post",
body: JSON.stringify(body)
});
const res = await response.text();
console.log(res);
})();
您使用了错误的bodyParser
您必须像这样使用bodyParser.json()中间件,以便能够在req.body处访问主体
app.use(bodyParser.json())
bodyParser.json([options]) 返回仅解析json并且仅查看Content-Type标头与type选项匹配的请求的中间件。该解析器接受主体的任何Unicode编码,并支持gzip和deflate编码的自动填充。
在中间件(即req.body)之后,在请求对象上填充了包含已解析数据的新主体对象。
来自:https://www.npmjs.com/package/body-parser#bodyparserjsonoptions