容易混淆-论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:{ ??? }

对于 queryparmas 来说

  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' }}"/>

namepath 都可以用

前者的 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`)

看这个形式有没有觉得很眼熟

它跟上面 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)
    .......
    })

req.body

上面两个都是处理 get 请求的

而这位小兄弟就是用来处理 post 请求的

(需要安装 body-parser 中间件)

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

我们就用 req.body 来接收

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

总结

我们归纳了 queryparams 在前端路由以及后端接收中的区别

容易混淆的东西还是得多写,多总结

希望这篇文章对大家分清它们的使用场景有所帮助


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Impractical Python Projects

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》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具