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

如何通过RESTful API获取MongoDB集合数据?新手技术求助

解决通过RESTful API获取MongoDB集合数据的问题

我帮你定位到了几个关键错误,这些就是导致接口无响应的核心原因,咱们一步步来修正:

1. 模型层getLists函数语法错误

在models/list.js里,你调用Item.find的写法完全不对——find方法的第一个参数是查询条件(空对象代表查询全部文档),第二个参数才是回调函数,你把回调写到了查询条件的位置里:

// models/list.js 修正后代码
const mongoose = require('mongoose');
const config = require('../config/database');

const ItemSchema = mongoose.Schema({
  item: { type: String },
  completed: { type: Boolean }
});

const Item = module.exports = mongoose.model('Item', ItemSchema);

module.exports.getLists = function(callback) {
  // 修正:空对象表示查询集合所有数据,第二个参数传入回调
  Item.find({}, callback);
}

2. 路由层响应逻辑的双重错误

在routes/list.js里有两个致命问题:

  • find方法返回的todos是文档数组,你直接写todos.item、todos.completed是取不到值的,应该直接返回整个数组
  • res.json里的对象语法错误,list: item: todos.item这种嵌套写法不符合JSON规范

另外你还漏掉了router的导出,这会导致路由根本无法被加载!修正后的路由代码:

// routes/list.js 修正后代码
const express = require('express');
const router = express.Router();
const List = require('../models/list');

// 获取所有待办项
router.get('/lists', (req, res, next) => {
  List.getLists((err, todos) => {
    if(err) {
      // 把错误信息返回,方便你调试排查
      return res.json({success: false, msg: '获取列表失败', error: err.message});
    }
    // 直接返回查询到的文档数组即可
    res.json({ 
      success: true, 
      list: todos 
    });
  });
});

// 必须导出router,否则server.js无法加载这个路由模块
module.exports = router;

3. 额外需要注意的细节

  • 你的路由文件夹拼写是routs,应该改成routes,否则server.js里的require('./routes/list')会找不到文件
  • 确认config/database.js里的MongoDB连接配置是正确的(比如数据库地址、用户名密码等)
  • 测试时可以用Postman或curl访问http://localhost:3000/todos/lists,就能看到返回的集合数据了

现在重启服务器,应该就能正常获取items集合里的所有数据了(mongoose会自动把模型名Item转为复数集合名items,这部分是没问题的)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:24:30