使用 Express 获得一个空的身体
Posted
技术标签:
【中文标题】使用 Express 获得一个空的身体【英文标题】:Getting an empty body using Express 【发布时间】:2020-06-08 11:30:49 【问题描述】:我目前正在使用 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);
)();
【问题讨论】:
你可以试试method: "POST"
,
【参考方案1】:
你使用了错误的bodyParser
您必须像这样使用 bodyParser.json() 中间件才能解析 json 并访问 req.body 中的正文
// this snippet will enable bodyParser application wide
app.use(bodyParser.json())
// you can also enable bodyParser for a set of routes if you don't need it globally like so
app.post('/..', bodyParser.json())
// or just for a set of routes
router.use(bodyParser.json()
bodyParser.json([选项]) 返回仅解析 json 并且仅查看 Content-Type 标头与 type 选项匹配的请求的中间件。此解析器接受正文的任何 Unicode 编码,并支持 gzip 和 deflate 编码的自动膨胀。
在中间件之后的请求对象上填充一个包含解析数据的新主体对象(即 req.body)。
来自:https://www.npmjs.com/package/body-parser#bodyparserjsonoptions
注意:如果您要发送 json 类型的正文,请不要忘记将 Content-Type: application/json
添加到您的请求中
更新:正如@ifaruki 所说,express 附带一个内置的json bodyParser,可通过express.json()
访问:https://expressjs.com/en/api.html#express.json
【讨论】:
【参考方案2】:您应该解析请求的正文
app.use(express.json());
使用最新的快递版本,您不需要body-parser
【讨论】:
@Marino 是这样的 谢谢,非常感谢。以上是关于使用 Express 获得一个空的身体的主要内容,如果未能解决你的问题,请参考以下文章
在 apollo-server-express 中增加身体限制大小