当前位置: 首页 > news >正文

【前端开发】query参数和params参数的区别

在Web开发中,query参数(URL查询参数)和params参数(路由参数)是两种不同的URL传参方式,它们的核心区别如下:


一、 位置不同

query参数params参数
位置URL中?之后,用&连接多个参数URL路径中的一部分
示例/search?q=vue&page=2/user/123/profile

二、 用途不同

query参数params参数
场景可选的非关键参数(过滤、排序、分页等)必填的资源标识符(ID、slug等)
特点参数可缺失,顺序无关参数是路径的一部分,通常不可缺失

示例对比

# params标识资源:获取ID为456的商品
GET /api/products/456# query过滤资源:搜索价格≤100的手机,按销量排序
GET /api/products?category=phone&maxPrice=100&sort=sales

三、 代码获取方式不同

1. Express.js中获取参数

// params参数:通过 req.params 获取
app.get('/user/:id', (req, res) => {console.log(req.params.id); // 123
});// query参数:通过 req.query 获取
app.get('/search', (req, res) => {console.log(req.query.q);    // "vue"console.log(req.query.page); // "2"
});
2. Vue Router中获取参数

// params参数:通过 $route.params 获取
this.$route.params.id // 123// query参数:通过 $route.query 获取
this.$route.query.q    // "vue"
this.$route.query.page // "2"

四、 SEO与缓存影响

query参数params参数
SEO可能被搜索引擎视为同一页面不同状态通常作为独立页面处理
缓存不同query可能共享缓存不同params通常视为不同资源

五、 使用建议

  1. 用params的场景

    • 标识唯一资源(如/user/:id

    • 需要友好的URL结构(如/blog/react-vs-vue

    • RESTful API设计中的资源定位

  2. 用query的场景

    • 过滤条件(如?category=books

    • 分页参数(如?page=3&limit=20

    • 排序参数(如?sort=price&order=asc

    • 不影响核心资源的可选参数


六、 高级技巧

  1. 混合使用

    # 同时使用params和query
    GET /category/books?minPrice=50&sort=rating

  2. 类型转换

    // query参数默认是字符串,需手动转换类型
    const page = Number(req.query.page) || 1;

  3. 参数校验

    // 使用express-validator等库验证参数
    checkParams('id').isInt({ min: 1 })
    checkQuery('page').optional().isInt({ min: 1 })


总结

  • params路径的一部分,用于标识资源

  • query附加参数,用于描述资源的状态
    掌握二者的区别,能让你的URL设计更符合RESTful规范,同时提升API的可维护性和可读性。

http://www.lryc.cn/news/535967.html

相关文章:

  • 推荐系统召回算法
  • Python基础(上)
  • 【DuodooBMS】给PDF附件加“受控”水印的完整Python实现
  • 【虚幻引擎UE】UE4.23到UE5.5的核心功能变化
  • 阿里云《AI 剧本生成与动画创作》解决方案技术评测
  • commons-io 包 IOUtils、FileUtils、FilenameUtils
  • JavaScript 加密技术全面指南
  • 【笔记】deep-seek wechat项目
  • FloodFill算法——搜索算法
  • H5接入支付宝手机网站支付并实现
  • 基于SpringBoot+uniapp的在线办公小程序+LW示例参考
  • 文章精读篇——OMG-LLaVA
  • 两个同一对象targetList和 sourceList 去重
  • 软件开发 | GitHub企业版常见问题解读
  • Docker 网络的配置与管理
  • 新手自学:如何用gromacs对简单分子复合物进行伞形采样
  • 力扣第一题 哈希解法 O(n)时间复杂度
  • elementui: el-dialog的header设置样式不生效
  • libpcap 的使用
  • ArcGISPro AA表O_Name字段 内容 复制到BB表BB字段里
  • 2.5 使用注解进行单元测试详解
  • 当没有OpenGL时,Skia如何绘制?
  • SaaS+AI应用架构:业务场景、智能体、大模型、知识库、传统工具系统
  • Go 语言中如何高效地处理集合
  • 布隆过滤器到底是什么东西?它有什么用
  • 【数据结构初阶第十节】队列(详解+附源码)
  • 沪深300股指期权能对股指期货进行完全套保吗?
  • JAVA学习第三天
  • win11电脑其他WiFi可以连,只有一个WiFi连不上
  • leetcode_1760 袋子里最少数目的球