深入了解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 相关文章推荐
jqeury eval将字符串转换json的方法
Jan 20 Javascript
bootstrap table 服务器端分页例子分享
Feb 10 Javascript
JavaScript检测鼠标移动方向的方法
May 22 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
Mar 16 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
Sep 05 Javascript
最原始的jQuery注册验证方式
Oct 11 Javascript
JQuery中Ajax的操作完整例子
Mar 07 Javascript
JavaScript框架Angular和React深度对比
Nov 20 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
Oct 19 Javascript
vue 设置 input 为不可以编辑的实现方法
Sep 19 Javascript
JS数据类型STRING使用实例解析
Dec 18 Javascript
原生JS实现音乐播放器的示例代码
Feb 25 Javascript
如何使用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
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
PHP include任意文件或URL介绍
2014/04/29 PHP
PHP数组操作类实例
2015/07/11 PHP
php服务器的系统详解
2019/10/12 PHP
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
js null,undefined,字符串小结
2010/08/21 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
JS+CSS实现的经典圆角下拉菜单效果代码
2015/10/21 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
vue项目中的webpack-dev-sever配置方法
2017/12/14 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
深入解答关于Python的11道基本面试题
2017/04/01 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
荟萃全球保健品:维他购
2018/05/09 全球购物
C#基础面试题
2016/10/17 面试题
煤矿安全演讲稿
2014/05/09 职场文书
代领毕业证委托书
2014/08/02 职场文书
家具商场的活动方案
2014/08/16 职场文书
移交协议书
2014/08/19 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS