使用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
相关产品推荐
相关产品推荐

