NodeJS MongoDB接口Postman POST请求报错:ObjectID传递问题排查
解决POST请求无法读取req.body.genreId的问题
嘿,我帮你排查了下代码,你遇到的TypeError: Cannot read property 'genreId' of undefined问题,核心原因是Express没有解析POST请求的JSON请求体,导致req.body是undefined,自然找不到genreId这个属性。
问题根源
在你的index.js里,你创建了Express应用,但没有添加解析JSON请求体的中间件。Express默认不会自动解析JSON格式的请求体,必须手动配置express.json()中间件,否则req.body始终是undefined。
快速修复步骤
- 在
index.js中,把express.json()中间件添加到所有路由挂载之前:
const express = require ('express'); const app=express(); // 新增这一行,解析JSON格式的请求体 app.use(express.json()); const home=require('./routes/home'); const genres=require('./routes/genres'); const customers=require('./routes/customers'); const movies = require('./routes/movies') // ... 其余连接数据库、挂载路由的代码保持不变
额外检查点
除了添加中间件,还要确认Postman的请求配置是否正确:
- 确保请求的Headers里包含
Content-Type: application/json; - 请求体选择
raw格式,并且右侧下拉框选中JSON,而不是form-data或x-www-form-urlencoded——你的请求JSON内容是正确的,但格式不对的话Express依然无法解析。
如果还是有问题,可以在movies.js的POST路由里先打印req.body,确认是否被正确解析:
routes.post('/', async (req, res) => { console.log('Received request body:', req.body); // 打印请求体 const { error } = validate(req.body); // ... 其余代码 });
这样修改后,应该就能正常读取req.body.genreId,完成电影的创建请求了。
内容的提问来源于stack exchange,提问作者Sharjeel Moqrab Khan
相关产品推荐
相关产品推荐

