容易混淆-论query和params在前后端中的区别

一. Vue中路由的传参

假设需要实现一个路由切换,点击之切换到W组件。并传递一个id值和一个age值。

运用router-link来写:

<router-link :to="{A: 'xxx', query: {xx: 'xxx'}}" />
<router-link :to="{A: 'xxx', params: {xx: 'xxx'}}" />
routers:{???}

对于query 和 params来说:

  • A是那么还是path
  • routers要怎么写
  • url长什么样子
  • 会有什么隐藏的坑吗

1. query

namepath都可以用。

  • name
<router-link :to="{ name: 'W', query: { id:'1234',age:'12' }}"/>

routes基于name设置:

{
  path: '/hhhhhhh', //这里可以任意
  name: 'W',  //这里必须是W
  component: W
}

​ 然后就把path匹配添加到url上去:

http://localhost:8080/#/hhhhhhh?id=1234&age=12
  • path
<router-link :to="{ path: '/W', query: { 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

2. parmas

这里只能用name不能用path,不然会直接无视掉params中的内容

<router-link :to="{ name: 'W', params: { id:'1234',age:'12' }}"/>

然后在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请求,于是我们又会接触到了query、params。

什么样的axios请求对应什么样的接受方式?
还有不止是req.query,req.params,还多了req.body

假设前端现在用axios向后端发送一个请求,发送id值请求后端的数据。

1. 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)
.......
})

2. req.params

那如果直接把id值写进发送的url里面呢

axios.get(`/api/1234`)

看这个形式有没有觉得很眼熟
它跟上面paramsurl非常像
我们就反向操作一下

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)
    .......
    })

3. req.body

上面两个都是处理get请求的,而req.body就是用来处理post请求的。(需要安装body-parser中间件)

axios.post(`/api`,{ id:'1234' })

我们就用req.body来接收

router.get('/api',function(req,res){
console.log(req.body.id)
.......
})

转载于

容易混淆-论query和params在前后端中的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值