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

