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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:56:02