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

使用Express从MongoDB的students集合获取数据失败,如何修复?

修复后的Express-MongoDB数据展示代码

原代码存在以下问题导致无法正常获取数据:

  • 数据库连接地址错误,未指向你创建的studentsRecords数据库
  • Schema未包含数据中的id字段,无法映射完整数据结构
  • Model名称与MongoDB集合不匹配(Mongoose会自动将模型名转为复数小写,原集合是students,模型名需设为Student)
  • 路由逻辑错误:/data/路由未定义URL参数,却尝试从req.params获取name;且原需求是展示所有数据,无需按name过滤

修复后的完整代码:

const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');

const app = express();
const port = process.env.PORT || 3000;

// Middleware
app.use(cors());
app.use(express.json());

// 连接到正确的studentsRecords数据库,添加连接状态提示
mongoose.connect('mongodb://localhost:27017/studentsRecords', {
  useNewUrlParser: true,
  useUnifiedTopology: true
})
.then(() => console.log('MongoDB连接成功'))
.catch(err => console.error('MongoDB连接失败:', err));

// 定义包含id和name字段的Schema,匹配插入的数据结构
const Schema = mongoose.Schema;
const StudentSchema = new Schema({
  id: Number,
  name: String
});

// 模型名设为Student,对应MongoDB的students集合
const Student = mongoose.model('Student', StudentSchema);

// 路由:获取所有学生数据
app.get('/students', async (req, res) => {
  try {
    // 查询所有学生,排除默认的_id字段
    const students = await Student.find({}, { _id: 0, id: 1, name: 1 });
    if (students.length === 0) {
      return res.status(404).send('暂无学生数据');
    }
    res.json(students);
  } catch (err) {
    console.error('获取数据失败:', err);
    res.status(500).send('服务器内部错误');
  }
});

// 可选:添加按姓名查询的路由
app.get('/students/:name', async (req, res) => {
  try {
    const { name } = req.params;
    const students = await Student.find({ name }, { _id: 0, id: 1, name: 1 });
    if (students.length === 0) {
      return res.status(404).send(`未找到名为${name}的学生`);
    }
    res.json(students);
  } catch (err) {
    console.error('获取数据失败:', err);
    res.status(500).send('服务器内部错误');
  }
});

// 启动服务器
app.listen(port, () => {
  console.log(`服务器运行在 http://localhost:${port}/`);
});

使用说明:

  • 启动服务器后,访问http://localhost:3000/students即可查看所有学生数据
  • 如果需要按姓名查询,访问http://localhost:3000/students/John即可获取对应学生信息

内容的提问来源于stack exchange,提问作者philomath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:33:16