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

Express内置Body Parser使用问题:req.body为undefined的解决求助

解决Express中req.body为undefined的问题

问题根源

Express的中间件是按注册顺序执行的。你当前的代码里,先挂载了路由app.use('/api', authRoutes),之后才注册express.json()和express.urlencoded()这些请求体解析中间件。这就导致请求到达路由处理函数时,还没经过解析中间件处理,所以req.body自然是undefined。

解决方案

调整中间件的注册顺序,先注册请求体解析中间件,再挂载路由。修改后的server.js代码如下:

const express = require('express')
const morgan = require('morgan')
const cors = require('cors')
const mongoose = require('mongoose')
require('dotenv').config()

const app = express()

// 连接数据库
mongoose
    // 你的数据库连接代码
  })
  .then(() => console.log('DB connected'))
  .catch(err => console.log('DB CONNECTION ERROR: ', err))

// 先注册应用级中间件
app.use(morgan('dev'))
app.use(express.json()) // Express 4.16+内置的JSON解析,替代废弃的body-parser
app.use(express.urlencoded({ extended: true }))
app.use(cors()) // 建议添加,避免后续跨域问题

// 导入路由
const authRoutes = require('./routes/auth')

// 最后挂载路由
app.use('/api', authRoutes)

const port = process.env.PORT || 8000
app.listen(port, () => {
  console.log(`API is running on port ${port} - ${process.env.NODE_ENV}`)
})

额外优化建议

  • 可以直接移除body-parser依赖,因为Express 4.16+已经内置了对应的请求体解析能力,无需单独安装。
  • 再次验证Postman的请求配置:确保Content-Type头确实为application/json,且请求体是合法的JSON格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:37:46