Postman返回空响应:MongoDB后端连接问题求助
解决Postman返回空响应的问题
我瞅了下你的代码,发现几个关键问题导致Postman测试时返回空响应,咱们一步步来排查修复:
1. 路由未挂载到Express应用
你在代码里创建了router并定义了GET路由,但没有把这个路由注册到你的Express app上,这就相当于你写了规则但没告诉应用要使用它,自然匹配不到请求。
修复方法:在中间件配置之后,添加路由挂载的代码,比如:
// 挂载路由到根路径,或者你可以自定义前缀比如'/api' app.use('/', router);
2. 缺少POST请求的处理路由
你提到测试了POST请求,但当前代码里只写了GET请求的处理逻辑,POST请求没有对应的路由处理,所以服务器不知道该怎么响应,会返回空或者404状态码。
给router添加POST路由的示例代码:
router.route("/").post((req, res) => { // 从请求体中获取数据 const { mood, entry1, entry2, entry3, date } = req.body; // 创建新的日记条目实例 const newDiaryEntry = new DiaryEntry({ mood, entry1, entry2, entry3, // 如果前端没传date,就用当前时间作为默认值 date: date || new Date() }); // 保存到数据库 newDiaryEntry.save() .then(() => res.json('日记条目已成功添加!')) .catch(err => res.status(400).json('错误: ' + err)); });
3. 可选优化:替换body-parser为Express内置解析器
从Express 4.16版本开始,已经内置了JSON解析功能,你可以把bodyParser.json()替换成:
app.use(express.json());
这样可以减少一个依赖包,功能完全一致。
修改后的完整app.js示例
const express = require('express') const mongoose = require('mongoose') const cors = require('cors') const router = require('express').Router(); const DiaryEntry = require('./models/diaryEntry') require('dotenv').config() // App初始化 const app = express() // 数据库连接 mongoose.connect(process.env.ATLAS_URI, { useNewUrlParser: true }) .then(() => console.log("Database Connected")) .catch(err => console.log('数据库连接失败:', err)); // 建议添加错误捕获,方便排查连接问题 // 中间件 app.use(express.json()) // 替换body-parser app.use(cors()) // GET请求:获取所有日记条目 router.route("/").get((req, res) => { DiaryEntry.find() .then(diaryEntries => res.json(diaryEntries)) .catch(err => res.status(400).json('Error: ' + err)); }); // POST请求:添加新日记条目 router.route("/").post((req, res) => { const { mood, entry1, entry2, entry3, date } = req.body; const newDiaryEntry = new DiaryEntry({ mood, entry1, entry2, entry3, date: date || new Date() }); newDiaryEntry.save() .then(() => res.json('Diary entry added!')) .catch(err => res.status(400).json('Error: ' + err)); }); // 挂载路由 app.use('/', router); // 启动服务器 const port = process.env.PORT || 5000 app.listen(port, () => { console.log(`Server is running on port ${port}`) })
测试注意事项
- GET请求的URL:
http://localhost:5000(如果挂载了前缀比如/api,就用http://localhost:5000/api) - POST请求同样使用上述URL,确保Postman的Body选择
raw->JSON格式,Content-Type设置为application/json
内容的提问来源于stack exchange,提问作者Nupur Dave
相关产品推荐
相关产品推荐

