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

如何通过单个API获取isActive为true和false的课程?代码问题排查

问题:无法通过API同时获取isActive为true和false的课程数据

看起来你在MongoDB查询条件的写法上犯了个语法错误,导致无法正确获取所有状态的课程。先拆解你的代码问题,再给你对应的修正方案:

你的现有代码

控制器 course.js

const Course = require("../models/Course")
module.exports.getAllCourses = () => {
  return Course.find({isActive: true, :false}).then(resultsFromFindActive => resultsFromFindActive)
}

路由 course.js

const express = require("express")
const router = express.Router()
const auth = require("../auth")
const CourseController = require("../controllers/course")
router.get('/active', (req, res) => {
  CourseController.getAllCourses().then(resultsFromFindActive => res.send(resultsFromFindActive))
})

问题分析

  1. 查询条件语法错误:{isActive: true, :false} 是完全无效的MongoDB查询格式——这个对象有一个语法错误的空键(:false),MongoDB根本无法解析这个条件,执行时会直接抛出异常。
  2. 路由命名误导:你的路由是/active,但你实际想获取所有课程(包括非活跃的),这个命名会让接口调用者误解它只返回活跃课程。
  3. 缺少错误处理:控制器和路由都没有捕获Promise的异常,一旦数据库查询失败,请求会一直处于挂起状态,前端得不到任何响应反馈。

修正方案

方案1:获取所有课程(最简洁)

如果isActive字段只有true和false两种值,直接调用Course.find()不带任何条件,就能返回集合里的所有课程:

// 修正后的控制器course.js
const Course = require("../models/Course")
module.exports.getAllCourses = () => {
  // find()不带参数默认返回所有文档,无需多余的then包装
  return Course.find()
}

方案2:显式匹配isActive的两种状态

如果isActive可能存在其他值(比如null),你想明确只获取true和false的课程,用MongoDB的$in操作符:

module.exports.getAllCourses = () => {
  return Course.find({ isActive: { $in: [true, false] } })
}

修正路由(含错误处理)

同时修正路由命名,并添加错误处理逻辑,避免请求挂起:

// 修正后的路由course.js
const express = require("express")
const router = express.Router()
const auth = require("../auth")
const CourseController = require("../controllers/course")

// 把路由改成更准确的/all或/courses
router.get('/all', (req, res) => {
  CourseController.getAllCourses()
    .then(results => res.send(results))
    .catch(err => {
      console.error(err) // 服务器端记录错误日志
      res.status(500).send({ message: "获取课程失败", error: err.message })
    })
})

额外优化提醒

  • 你写的then(resultsFromFindActive => resultsFromFindActive)完全是多余的,因为Course.find()本身就返回一个Promise,直接返回这个Promise即可。
  • 生产环境中建议不要直接把原始错误信息返回给前端,返回友好提示的同时,把详细错误记录在服务器日志里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:22:29