深入了解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 相关文章推荐
lyhucSelect基于Jquery的Select数据联动插件
Mar 29 Javascript
jquery 插件学习(五)
Aug 06 Javascript
JavaScript避免内存泄露及内存管理技巧
Sep 05 Javascript
JavaScript中对象介绍
Dec 31 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
Jan 18 Javascript
深入浅析JavaScript函数前面的加号和叹号
Jul 09 Javascript
省市二级联动小案例讲解
Jul 24 Javascript
jQuery鼠标事件总结
Oct 13 Javascript
详解Vue方法与事件
Mar 09 Javascript
原生JS实现ajax与ajax的跨域请求实例
Dec 01 Javascript
Node.js原生api搭建web服务器的方法步骤
Feb 15 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
Jun 01 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
推荐十款免费 WordPress 插件
2015/03/24 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
2019/10/24 PHP
JS获取地址栏参数的几种方法小结
2014/02/28 Javascript
如何实现移动端浏览器不显示 pc 端的广告
2015/10/15 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
bootstrap警告框示例代码分享
2017/05/17 Javascript
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
python使用cPickle模块序列化实例
2014/09/25 Python
Zabbix实现微信报警功能
2016/10/09 Python
Python数据结构之单链表详解
2017/09/12 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
pyspark操作MongoDB的方法步骤
2019/01/04 Python
python pandas时序处理相关功能详解
2019/07/03 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
助人为乐模范事迹材料
2014/06/02 职场文书
2014年秋季新学期寄语
2014/08/02 职场文书
优秀团员事迹材料1000字
2014/08/20 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
2015年国培研修感言
2015/08/01 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
教你使用pyinstaller打包Python教程
2021/05/27 Python
数据库之SQL技巧整理案例
2021/07/07 SQL Server
MySQL新手入门进阶语句汇总
2022/09/23 MySQL