Express接收fetch发送的POST请求时req.body为空该如何解决
问题原因
你在客户端的fetch请求中设置了Content-Type: application/json,提交的是JSON格式的请求体,但Express服务端仅配置了express.urlencoded()中间件,该中间件仅能解析application/x-www-form-urlencoded格式的表单数据,无法解析JSON格式的请求体,因此req.body会返回空对象。
解决方案
只需要在服务端注册路由前,添加JSON解析中间件即可:
// 原有表单解析中间件可保留,不影响使用 app.use(express.urlencoded({ extended: true })); // 新增JSON格式请求体解析中间件 app.use(express.json()); app.post('/api/login', (req, res) => { console.log(req.body) // 此时即可正常获取到name、password参数 res.redirect('/login') })
补充注意点
- 所有解析
req.body的中间件必须注册在路由定义之前,否则路由执行时中间件还未生效,仍然无法获取参数 - 如果后续需要接收FormData格式的文件上传请求,还需要额外引入
multer这类第三方中间件处理
内容的提问来源于stack exchange,提问作者YassBan
相关产品推荐
相关产品推荐

