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

TypeScript使用Express如何创建带查询参数的GET接口

问题原因

Express 路由匹配规则仅校验URL的路径段,? 之后的查询字符串不会参与路由匹配,你把查询参数直接写在路由路径里的写法完全不符合路由匹配逻辑,自然无法命中接口。

正确实现方案
  • 路由定义只需要写基础路径,不需要带任何查询参数部分:
// 仅匹配路径为/dogs的GET请求,查询参数会被Express自动解析
router.get('/dogs', breedAndNameController.fetch);
  • 在控制器处理函数中,直接通过内置的req.query对象获取传入的查询参数即可,参考实现:
export const fetch = async (req: any, res: any) => {
    try {
        // 从query中解构取出需要的参数
        const { breed, name } = req.query;
        
        // 可选:必填参数校验
        if (!breed || !name) {
            return res.status(400).send("缺少必填参数breed或name");
        }

        console.log("接收到参数:breed=", breed, "name=", name);
        return res.status(200).send("success");
    } catch (err) {
        console.log(err);
        return res.status(500).send("服务端内部错误");
    }
}

注意:只有路径参数(例如/dogs/GOLDEN/rex这类把参数直接写在路径段中的形式)才需要在路由定义中用:参数名的形式做占位,?后拼接的查询参数永远不需要写在路由路径中。

配置完成后发起GET /dogs?breed=GOLDEN&name=rex请求,即可正常进入处理逻辑,req.query.breed会拿到值GOLDEN,req.query.name会拿到值rex。4.x及以上版本的Express内置了查询参数解析能力,不需要额外引入第三方依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:06:18