当前位置: 首页 > 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的可维护性和可读性。

相关文章:

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

在Web开发中,query参数(URL查询参数)和params参数(路由参数)是两种不同的URL传参方式,它们的核心区别如下: 一、 位置不同 query参数params参数位置URL中?之后,用&连接多个参数…...

推荐系统召回算法

推荐系统召回算法 召回算法UserCFItemCFSwing矩阵分解 召回算法 基于协同过滤的召回算法主要是应用在推荐环节的早期阶段,大致可以分为基于用户、基于物品的。两者各有优劣,优点是具有较好的可解释性,缺点是对于稀疏的交互矩阵,效…...

Python基础(上)

1. 基础语法 1.1 环境安装 Python版本: 推荐使用Python 3.6.6及以上开发工具: PyCharm 1.2 基本语法 输出: print("Hello World")​ 注释: 单行注释: # 注释内容​(快捷键 Ctrl/​) 多行注释: 使用三引号 注释内容​ 注意:不推…...

【DuodooBMS】给PDF附件加“受控”水印的完整Python实现

给PDF附件加“受控”水印的完整Python实现 功能需求 在实际工作中,许多文件需要添加水印以标识其状态,例如“受控”“机密”等。对于PDF文件,添加水印不仅可以增强文件的可识别性,还可以防止未经授权的使用。本代码的功能需求是…...

【虚幻引擎UE】UE4.23到UE5.5的核心功能变化

简单总结从UE4.23到UE5.5,虚幻引擎的重大变化: 1. WebGL/HTML5 平台支持和像素流 UE4.23-UE4.25:移除官方HTML5支持,改为社区插件维护。 但通过第三方插件(如WebAssemblyWebGPU)可在浏览器运行部分项目。U…...

阿里云《AI 剧本生成与动画创作》解决方案技术评测

引言 随着人工智能技术的发展,越来越多的工具和服务被应用于内容创作领域。阿里云推出的《AI 剧本生成与动画创作》解决方案,利用函数计算 FC 构建 Web 服务,结合百炼模型服务和 ComfyUI 工具,实现了从故事剧本撰写、插图设计、声…...

commons-io 包 IOUtils、FileUtils、FilenameUtils

1. IOUtils void IOUtils.closeQuietly(Closeable... closeables) 无条件关闭流。int IOUtils.copy(InputStream inputStream, OutputStream outputStream) 将字节从InputStream复制到OutputStream,返回复制的长度,流最大不能超过2G,默认缓冲…...

JavaScript 加密技术全面指南

一、加密技术概述 在现代 Web 开发中,加密技术在保护用户数据和确保信息安全方面发挥着至关重要的作用。本文将带您了解 JavaScript 加密技术的基本概念、分类及其在实际应用中的场景。 加密的基本概念 加密是一种将明文数据转换为密文的技术,以保护数…...

【笔记】deep-seek wechat项目

1、安装ollama ollama官网 2、ollama上部署deepseek ollama官网下载deepseek模型(我下了1.5B) 3、配置python 国内镜像源 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ 安装依赖包 pip install wxauto pip instal…...

FloodFill算法——搜索算法

一、什么是FloodFill算法 FloodFill算法字面意思就是洪水灌溉法,比如我们有这么一块地: 0表示平原,正数表示高地,负数表示凹地,那么当洪水来临时这些凹地会被优先灌满。而我们要找的正是这些联通块,如&…...

H5接入支付宝手机网站支付并实现

小程序文档 - 支付宝文档中心 1.登录 支付宝开放平台 创建 网页/移动应用 2.填写创建应用信息 3.配置开发设置 4.网页/移动应用:需要手动上线。提交审核后,预计 1 个工作日的审核时间。详细步骤可点击查看 上线应用 。应用上线后,还需要完成…...

基于SpringBoot+uniapp的在线办公小程序+LW示例参考

1.项目介绍 系统角色:管理员、普通用户功能模块:员工管理、部门信息管理、职位信息管理、会议记录、待办事项、工资信息、留言板等技术选型:SpringBoot,Vue(后端管理web),uniapp等测试环境&…...

文章精读篇——OMG-LLaVA

题目:OMG-LLaVA: Bridging Image-level, Object-level, Pixel-level Reasoning and Understanding 会议:Conference on Neural Information Processing Systems 2024 论文:http://arxiv.org/abs/2406.19389 主页:https://lxtgh…...

两个同一对象targetList和 sourceList 去重

我现在需要解决的问题是从一个Java的源列表`sourceList`中移除所有在目标列表`targetList`中存在的数据,并且还要去除`targetList`中的重复数据。让我先理清楚这两个问题的思路。 首先,如何快速从`sourceList`中移除含有`targetList`的数据。这里的“含有”应该是指两个列表中…...

软件开发 | GitHub企业版常见问题解读

什么是GitHub企业版? GitHub企业版是一个企业级软件开发平台,专为现代化开发的复杂工作流程而设计。 作为可扩展的平台解决方案,GitHub企业版使组织能够无缝集成其他工具和功能,并根据特定需求定制开发环境,提高整体…...

Docker 网络的配置与管理

目录 查看所有网络 查看网络详细信息 创建新的网络 删除网络 清理未使用的网络 将容器连接到网络 将容器从网络中断开 将容器端口映射到宿主机 绑定到特定 IP 地址 为容器设置自定义 DNS 查看所有网络 docker network ls 功能:列出所有 Docker 网络。 工…...

新手自学:如何用gromacs对简单分子复合物进行伞形采样

1、建立体系: 1、将蛋白的pdb文件转化为gmx: gmx pdb2gmx -f 2BEG_model1_capped.pdb -ignh -ter -o complex.gro 这个网页可以实现将多肽序列转化为pdb: ProBuilder On-line 这个教程的蛋白2BFG包含两条链(chain A和B) 在生成的topol文件中,增加如下的内容,效果就…...

力扣第一题 哈希解法 O(n)时间复杂度

题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那俩个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返…...

elementui: el-dialog的header设置样式不生效

问&#xff1a; el-dialog的header设置样式不生效 回答&#xff1a; 场景&#xff1a; <el-dialogv-model"dialogVisible"width"800px":before-close"beforeClose"append-to-body:close-on-click-modal"false"title"增加文…...

libpcap 的使用

1.libpcap的模式 有线环境: 使用混杂模式promisous&#xff0c;完成监听无线环境: 使用监听模式monitor&#xff0c;完成监听 2.交叉编译libpcap 设置好交叉编译工具链后下载libpcap源码使用configure进行构建&#xff1a;–disable-shared 构建静态库&#xff0c;–host 、…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...