深入了解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 相关文章推荐
bgsound 背景音乐 的一些常用方法及特殊用法小结
May 11 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
Jan 21 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
May 19 Javascript
setTimeout()与setInterval()方法区别介绍
Dec 24 Javascript
JS案例分享之金额小写转大写
May 15 Javascript
javascript搜索框效果实现方法
May 14 Javascript
jQuery实现的多级下拉菜单效果代码
Aug 24 Javascript
VsCode新建VueJs项目的详细步骤
Sep 23 Javascript
微信小程序实现单列下拉菜单效果
Apr 25 Javascript
浅谈redux, koa, express 中间件实现对比解析
May 23 Javascript
vue路由插件之vue-route
Jun 13 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
Jul 10 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
新手配置 PHP 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
文档对象模型DOM通俗讲解
2013/11/01 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
python中subprocess批量执行linux命令
2018/04/27 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
基于Python实现用户管理系统
2019/02/26 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
Pytorch之finetune使用详解
2020/01/18 Python
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
教学个人的自我评价分享
2014/02/16 职场文书
家长意见书
2015/06/04 职场文书
html实现随机点名器的示例代码
2021/04/02 Javascript
python自动化调用百度api解决验证码
2021/04/13 Python
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS