深入了解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 相关文章推荐
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
Jan 22 Javascript
DOM和XMLHttpRequest对象的属性和方法整理
Jan 04 Javascript
jquery实现文字由下到上循环滚动的实例代码
Aug 09 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
Nov 07 Javascript
Tab切换组件(选项卡功能)实例代码
Nov 21 Javascript
Jquery 在页面加载后执行的几种方式
Mar 14 Javascript
jquery防止重复执行动画避免页面混乱
Apr 22 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
Sep 03 Javascript
基于JavaScript实现下拉列表左右移动代码
Feb 07 Javascript
HTML的select控件美化
Mar 27 Javascript
微信小程序 侧滑删除(左滑删除)
May 23 Javascript
微信小程序中使用ECharts 异步加载数据的方法
Jun 27 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
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
Python常用的爬虫技巧总结
2016/03/28 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
PyQt5 多窗口连接实例
2019/06/19 Python
如何定义TensorFlow输入节点
2020/01/23 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
Python对excel的基本操作方法
2021/02/18 Python
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
教育系毕业生中文求职信范文
2013/10/06 职场文书
幼儿园教师奖惩制度
2014/02/01 职场文书
出纳岗位职责
2015/01/31 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
争做文明公民倡议书
2019/06/24 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
Java 数据结构七大排序使用分析
2022/04/02 Java/Android
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server