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

如何在Mongoose中按API路径传入的分类值查询所有匹配的Product文档

错误原因

你的项目中存在另一个匹配/api/products/:id的路由,且该路由的定义顺序早于分类查询路由。Express的路由匹配遵循先定义先命中规则,当你发起/api/products/tennis请求时,会优先匹配到:id参数路由,程序尝试将字符串tennis转换为MongoDB的ObjectId类型查询_id字段,因此抛出类型转换失败的错误。

你贴出的model、controller、分类路由的代码逻辑本身没有问题,只需要调整路由规则即可解决。


解决方法

方案1:调整路由定义顺序

将更具体的分类路由放到泛化的ID查询路由之前,确保分类请求优先命中对应路由:

// productRoutes.js 调整路由顺序
router.route('/:category').get(getProductsByCategory)
// ID查询路由放在后面
router.route('/:id').get(getProductById)

方案2(更推荐):给分类路由加专属前缀

从根源避免两个参数路由的匹配冲突,后续维护也不会因为路由顺序调整出现问题:

// productRoutes.js 修改分类路由规则
router.route('/category/:category').get(getProductsByCategory)

调整后请求路径改为/api/products/category/tennis即可正常使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:45:03