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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:32:54