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
相关产品推荐
相关产品推荐

