深入了解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 相关文章推荐
js设置组合快捷键/tabindex功能的方法
Nov 21 Javascript
js实现支持手机滑动切换的轮播图片效果实例
Apr 29 Javascript
Bootstrap每天必学之弹出框(Popover)插件
Apr 25 Javascript
将JSON字符串转换成Map对象的方法
Nov 30 Javascript
在vue中安装使用vux的教程详解
Sep 16 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
Nov 28 Javascript
Vue 开发必须知道的36个技巧(小结)
Oct 09 Javascript
对vuex中getters计算过滤操作详解
Nov 06 Javascript
js中Function引用类型常见有用的方法和属性详解
Dec 11 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
Apr 14 Javascript
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
JavaScript 绘制饼图的示例
Feb 19 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
中东人咖啡哲学
2021/03/03 咖啡文化
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
2014过年倒计时示例
2014/01/31 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
Javascript Global对象
2009/08/13 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
Python3.6安装及引入Requests库的实现方法
2018/01/24 Python
python如何为创建大量实例节省内存
2018/03/20 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
简单了解python反射机制的一些知识
2019/07/13 Python
django model通过字典更新数据实例
2020/04/01 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
教育技术学专业职业规划书
2014/03/03 职场文书
质量承诺书范文
2014/03/27 职场文书
酒店节能降耗方案
2014/05/08 职场文书
会议欢迎词范文
2015/01/27 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
让人感觉高大上的讲话稿怎么写?
2019/07/08 职场文书
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android