[nodejs]Express入门-请求体res.body为{}的情况

1.仅配置app.use(express.json())未配置app.use(express.urlencoded({ extended: false }))

// 配置解析application/json格式数据的内置中间件
app.use(express.json())

问题:未配置处理application/x-www-form-urlencoded格式数据的中间件

解决方法:配置app.use(express.urlencoded({ extended: false }))

// 配置解析application/json格式数据的内置中间件
app.use(express.json())
// 配置解析application/x-www-form-urlencoded格式数据的内置中间件
app.use(express.urlencoded({ extended: false }))

2.上述两个中间件都配置了,但获取res.body还是为{}

问题:请求头未配置数据格式,默认数据格式为application/json

解决:

前端发送请求时,设置请求头“content-type”为“application/x-www-form-urlencoded

同时在服务端配置跨域请求允许的访问头

app.use(function(req,res,next){
  res.header('Access-Control-Allow-Headers', 'Content-Type')
  next()
})

如果不配置res.header('Access-Control-Allow-Headers', 'Content-Type'),则会出现以下提示content-type is not allowed

3.若请求体res.body为undefined,可能是因为上述两个中间件都未配置。

如果你在 node.js 中使用 POST 请求,但是无法从 `req.body` 中获取数据,可能有几种原因。 1. 没有正确地使用中间件 在使用 Express.js 等 web 框架时,需要使用中间件解析请求正文。如果没有正确地使用中间件,`req.body` 将为对象。 在 Express.js 中,你可以使用 `body-parser` 中间件解析请求正文。在你的应用程序中添加以下代码: ```javascript const express = require('express'); const bodyParser = require('body-parser'); const app = express(); // 解析 application/json app.use(bodyParser.json()); // 解析 application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: true })); ``` 2. 请求的 Content-Type 不正确 如果请求的 Content-Type 不正确,`req.body` 将为对象。请确保请求的 Content-Type 与你的中间件解析正文的类型匹配。 3. 请求体太大 默认情况下,Node.js 的 HTTP 模块限制请求正文大小为 100kb。如果请求正文超过此大小,则 `req.body` 将为对象。 你可以通过在 `http.createServer` 函数中传递一个选项对象来更改此限制: ```javascript const server = http.createServer((req, res) => { // 增加限制为 1MB req.connection.setTimeout(1000 * 60 * 10); // 10 分钟 req.connection.setMaxListeners(50); req.on('data', chunk => { // 处理数据 }); }); ``` 以上是一些常见的原因,如果以上方法都无法解决问题,你可以尝试使用调试工具来检查请求和响应。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值