如何使用MongoDB实现POST请求,解决Postman报Cannot POST /api/grocery问题
问题排查与修复方案
1 直接报错根因修复
你收到的Cannot POST /api/grocery属于Express路由匹配失败的404错误,问题出在入口文件index.js的路由定义:
现有代码的路由路径没有以斜杠开头:
// 错误写法 app.post('api/grocery', (req, res) => { groceryController.addGrocery(req, res) })
Express要求路由路径必须以/开头才能匹配到对应请求,修改为:
// 正确写法 app.post('/api/grocery', (req, res) => { groceryController.addGrocery(req, res) })
修改后即可解决该报错。
2 其他潜在问题修复(避免报错解决后仍无法正常请求)
2.1 补充JSON请求体解析中间件
当前你只配置了express.urlencoded(),只能解析x-www-form-urlencoded格式的请求参数,如果你在Postman中使用JSON格式传参,需要在index.js中新增JSON解析配置:
app.use(express.urlencoded({extended: true})); app.use(express.json()); // 新增这行
2.2 修复Model层回调逻辑缺失
现有model层的addGrocery方法仅处理了插入失败的回调,插入成功时没有触发回调,会导致请求一直挂起超时,修改modelGrocery.js的addGrocery方法:
const addGrocery = (grocery, callback) => { db.insertOne({ item: grocery.item, quantity: grocery.quantity }) .then(() => callback(null)) // 新增插入成功的回调调用 .catch(err => callback(err)) }
2.3 数据库连接校验
确认../../DB/db.js导出的是已成功连接MongoDB的集合实例,服务启动时无数据库连接报错,否则插入操作会返回500错误。
3 功能验证步骤
- 保存所有修改后重启Node服务
- 打开Postman新建POST请求,地址填入
http://localhost:3000/api/grocery - 根据你配置的解析中间件选择请求格式:
- 若使用JSON格式:Body选择raw,下拉选JSON,填入参数示例:
{ "item": "牛奶", "quantity": 2 }
- 若使用表单格式:Body选择
x-www-form-urlencoded,填入对应key(item、quantity)和value
- 发送请求,正常会返回201状态码,查询MongoDB对应集合可看到新增的文档记录。
内容的提问来源于stack exchange,提问作者Letscode
相关产品推荐
相关产品推荐

