深入了解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 相关文章推荐
jQuery取消ajax请求的方法
Jun 09 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
Aug 07 Javascript
原生JS取代一些JQuery方法的简单实现
Sep 20 Javascript
JS实现的四级密码强度检测功能示例
May 11 Javascript
javaScript中的空值和假值
Dec 18 Javascript
Vue中的作用域CSS和CSS模块的区别
Oct 09 Javascript
JQuery Ajax执行跨域请求数据的解决方案
Dec 10 jQuery
vue-cli3 配置开发与测试环境详解
May 17 Javascript
node中使用log4js4.x版本记录日志的方法
Aug 20 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
May 28 Javascript
vue接通后端api以及部署到服务器操作
Aug 13 Javascript
一行JavaScript代码如何实现瀑布流布局
Dec 11 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
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
JavaScript实现秒杀时钟倒计时
2019/09/29 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
python+pyqt实现右下角弹出框
2017/10/26 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
汉森批发:Hansen Wholesale
2018/05/24 全球购物
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
考博专家推荐信模板
2013/12/02 职场文书
初中学生期末评语
2014/04/24 职场文书
设计顾问服务计划书
2014/05/04 职场文书
本科应届生自荐信
2014/06/29 职场文书
医学专业大学生求职信
2014/07/12 职场文书
优秀教师先进材料
2014/12/16 职场文书