容易混淆-论query和params在前后端中的区别
栏目: JavaScript · 发布时间: 6年前
内容简介:最近在学node,试着做一个前后端都有的项目然后就遇到了query和parmas这俩兄弟你说他们俩长得也不像吧
前言
最近在学node,试着做一个前后端都有的项目
然后就遇到了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
来说
- A用name还是path?
- routes要怎么写?
- url长什么样?
- 会有什么隐藏的坑么
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
在前端路由以及后端接收中的区别
容易混淆的东西还是得多写,多总结
希望这篇文章对大家分清它们的使用场景有所帮助
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Impractical Python Projects
Lee Vaughan / No Starch Press / 2018-11 / USD 29.95
Impractical Python Projects picks up where the complete beginner books leave off, expanding on existing concepts and introducing new tools that you’ll use every day. And to keep things interesting, ea......一起来看看 《Impractical Python Projects》 这本书的介绍吧!