You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何POST请求中无法获取req.body?Passport.js登录场景排查

Passport.js登录时req.body为空的问题排查与解决

问题描述

尝试通过Passport.js实现登录功能,React客户端传递用户名和密码到Express服务端,但服务端控制台打印的req.body为空对象,导致passport-local无法读取认证参数。

核心原因与解决方案

1. 客户端缺少请求头配置

React的fetch请求中,使用JSON.stringify()序列化请求体时,必须显式设置Content-Type: application/json请求头,否则服务端的body-parser.json()中间件无法识别请求体格式,无法解析出req.body数据。

修改后的客户端postLogin函数:

const postLogin = async (username, password) => {
  await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json' // 新增请求头
    },
    body: JSON.stringify({
      username: username,
      password: password
    })
  })
  .then(data => console.log(data))
}

2. 服务端中间件验证

你的服务端代码已经正确挂载了body-parser.json()和body-parser.urlencoded()中间件,且顺序在路由处理之前,这部分配置没问题。如果后续仍有问题,可以检查:

  • 确认路由挂载到Express主应用时的路径是否正确(比如主应用是否用app.use('/auth', router)挂载了该路由)
  • 检查是否有其他中间件拦截了请求体数据

测试验证

修改客户端代码后,可通过浏览器开发者工具的Network面板查看POST请求的Headers,确认Content-Type已设置为application/json,此时服务端控制台打印的req.body应该能正确显示传入的用户名和密码。

内容的提问来源于stack exchange,提问作者Joshua Cushing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:07:36