深入了解query和params的使用区别


Posted in Javascript onJune 24, 2019

前言

路由传参的时候,有俩兄弟,一个叫query,一个叫parmas

你说他们俩长得也不像吧,可这用法实在是太类似了

下面就让我们分别从vue路由和Node接收两个角度讲他们的区别

vue路由中的传参

假设我们现在需要实现一个路由切换,点击之切换到W组件

并传递一个id值和一个age值

我们运用router-link来写

然后一连串的疑惑就产生了

<router-link :to="{ A: 'xxx', query: { xx:'xxx' }}" />
<router-link :to="{ A: 'xxx', parmas: { xx:'xxx' }}" />
routes:{ ??? }

对于query和parmas来说

  1. A用name还是path?
  2. routes要怎么写?
  3. url长什么样?
  4. 会有什么隐藏的坑么

query:

<router-link :to="{ name: 'W', query: { id:'1234',age:'12' }}"/>
<router-link :to="{ path: '/W', query: { id:'1234',age:'12' }}"/>

name和path都可以用

前者的routes基于name设置

{
path: '/hhhhhhh', //这里可以任意
name: 'W', //这里必须是W
component: W
}

然后就把path匹配添加到url上去

http://localhost:8080/#/hhhhhhh?id=1234&age=12

后者基于path来设置routes

{
path: '/W', //这里必须是W
name: 'hhhhhhhh', //这里任意
component: W
}

url:http://localhost:8080/#/W?id=1234&age=12

这两种方法,都可以自定义path的样式,
不过一个是在router-link to里面定义,一个则是在routes里面定义
在接收参数的时候都是使用this.$route.query.id

parmas:

<router-link :to="{ name: 'W', params: { id:'1234',age:'12' }}"/>

这里只能用name不能用path,不然会直接无视掉params中的内容
然后在routes中添加

{
path:'/W/:id/:age',
name:'W',
component:W
}

这里的name与上面router-link中的name保持一致

url就取决于这个path的写法http://localhost:8080/#/W/1234/12

注意,path里面的/w可以任意写,写成/hhhhh也可以

但是!

/:id和/:age不能省略,且不能改名字

不写的话,第一次点击可以实现组件跳转

且可以通过this.$route.parmas.id获取到传过来的id值,但如果

刷新页面,传过来的id值和age值就会丢失

从这也能看出params比query严格

Node中的req.query和req.params

在后端中,要接受前端的axios请求

于是我们又碰到了这哥俩

什么样的axios请求对应什么样的接受方式?

还有不止是req.query,req.params,又混进来一个req.body

好家伙,乱成一锅粥

假设前端现在用axios向后端发送一个请求,发送id值请求后端的数据

req.query

axios.get(`/api/?id=1234`)

或者

axios.get(`/api`,{ params:{id:'1234' })

在前端里面,router怎么发送的就怎么收

query发送的就用this.$route.query接收

params发送的就用this.$route.params接收

但是在这里,虽然第二种方式里面有params

但这两种我们都要用req.query.id来获取里面的id值

router.get('/api',function(req,res){
console.log(req.query.id)
.......
})

req.params

那如果直接把id值写进发送的url里面呢

axios.get(`/api/1234`)

看这个形式有没有觉得很眼熟
它跟上面params的url非常像, 我们就反向操作一下

router.get('/api/:id',function(req,res){
console.log(req.params.id)
.......
})

如果它是这么请求的

axios.get(`/api/1234-12`)

中间用-或者&隔开
那我们也可以在获取时的路径上这么写

router.get('/api/:id-:age',function(req,res){
console.log(req.params.id)
console.log(req.params.age)
.......
})

req.body

上面两个都是处理get请求的

而这位小兄弟就是用来处理post请求的
(需要安装body-parser中间件)

axios.post(`/api`,{ id:'1234' })

我们就用req.body来接收

router.get('/api',function(req,res){
console.log(req.body.id)
.......
})

总结

我们归纳了query和params在前端路由以及后端接收中的区别

容易混淆的东西还是得多写,多总结

希望这篇文章对大家分清它们的使用场景有所帮助

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript getElementsByName()的用法说明
Jul 31 Javascript
js类的静态属性和实例属性的理解
Oct 01 Javascript
jQuery Autocomplete自动完成插件
Jul 17 Javascript
关于图片的预加载过程中隐藏未知的
Dec 19 Javascript
批量修改标签css样式以input标签为例
Jul 31 Javascript
浅谈javascript 迭代方法
Jan 21 Javascript
JavaScript数据类型判定的总结笔记
Jul 31 Javascript
深入浅析同源策略和跨域访问
Nov 26 Javascript
ES6中Array.copyWithin()函数的用法实例详解
Sep 16 Javascript
微信小程序中实现手指缩放图片的示例代码
Mar 13 Javascript
怎么理解wx.navigateTo的events参数使用详情
May 18 Javascript
vue实现简易计算器功能
Jan 20 Vue.js
如何使用JavaScript实现栈与队列
Jun 24 #Javascript
简单了解JavaScript中的执行上下文和堆栈
Jun 24 #Javascript
一次让你了解全部JavaScript的作用域
Jun 24 #Javascript
通过循环优化 JavaScript 程序
Jun 24 #Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
Jun 24 #Javascript
node中实现删除目录的几种方法
Jun 24 #Javascript
什么时候不能在 Node.js 中使用 Lock Files
Jun 24 #Javascript
You might like
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
33道php常见面试题及答案
2015/07/06 PHP
简明json介绍
2008/09/28 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
javascript变量提升和闭包理解
2018/03/12 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
python生成指定尺寸缩略图的示例
2014/05/07 Python
python执行get提交的方法
2015/04/29 Python
Python全局变量用法实例分析
2016/07/19 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
python中的二维列表实例详解
2018/06/19 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
Python Series从0开始索引的方法
2018/11/06 Python
python中实现控制小数点位数的方法
2019/01/24 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
澳大利亚音乐商店:Bava’s Music City
2019/05/05 全球购物
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
司机岗位职责
2013/11/15 职场文书
CAD制图设计师自荐信
2014/01/29 职场文书
美国留学经济担保书
2014/05/20 职场文书
民主生活会剖析材料
2014/09/30 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
 python中的元类metaclass详情
2022/05/30 Python