Express查询字符串参数问题:单参数请求失效排查
问题分析
你的问题出在查询条件的构建上:当只传入category参数时,subcategory的值为undefined,此时MongoDB的find方法会尝试匹配**subcategory字段严格等于undefined**的文档,而不是忽略这个条件返回所有符合category的结果,所以无法得到预期数据。
另外,你的路由定义/:category?/:subcategory?是用于匹配URL路径参数(比如/country/phone/oppo),但你实际使用的是URL查询参数(?category=phone),这个路由参数定义是多余的,甚至可能导致路由匹配异常,建议移除。
解决方案
动态构建查询条件,只将存在的参数加入查询对象:
router.get('/', async (req, res) => { try { const query = {}; // 仅当参数存在时,添加到查询条件 if (req.query.category) { query.category = req.query.category; } if (req.query.subcategory) { query.subcategory = req.query.subcategory; } const data = await Model.find(query); res.json(data); } catch (error) { res.status(500).json({ message: error.message }); } });
这样修改后:
- 当只传入
category=phones时,查询条件为{category: "phones"},会返回所有手机类数据 - 当同时传入
category=phones&subcategory=iphones时,查询条件为{category: "phones", subcategory: "iphones"},返回对应子类数据
内容的提问来源于stack exchange,提问作者lb2020
相关产品推荐
相关产品推荐

