如何在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
相关产品推荐
相关产品推荐

