最近在學node,試着作一個先後端都有的項目
而後就遇到了query和parmas這倆兄弟
你說他們倆長得也不像吧
可這用法實在是太相似了
這不,專門寫篇文章來區分這哥倆
分別會從vue路由和Node接收兩個角度講前端
假設咱們如今須要實現一個路由切換,點擊之切換到W組件
並傳遞一個id
值和一個age
值vue
咱們運用router-link
來寫
而後一連串的疑惑就產生了node
<router-link :to="{ A: 'xxx', query: { xx:'xxx' }}" /> <router-link :to="{ A: 'xxx', parmas: { xx:'xxx' }}" /> routes:{ ??? }
對於query
和parmas
來講ios
query
:<router-link :to="{ name: 'W', query: { id:'1234',age:'12' }}"/> <router-link :to="{ path: '/W', query: { id:'1234',age:'12' }}"/>
name
和path
均可以用axios
前者的routes
基於name
設置後端
{ path: '/hhhhhhh', //這裏能夠任意 name: 'W', //這裏必須是W component: W }
而後就把path
匹配添加到url
上去api
http://localhost:8080/#/hhhhhhh?id=1234&age=12
後者基於path
來設置routes
post
{ path: '/W', //這裏必須是W name: 'hhhhhhhh', //這裏任意 component: W }
url
:this
http://localhost:8080/#/W?id=1234&age=12
這兩種方法,均可以自定義path
的樣式,
不過一個是在router-link to
裏面定義,一個則是在routes
裏面定義url
在接收參數的時候都是使用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嚴格
在後端中,要接受前端的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
在前端路由以及後端接收中的區別
容易混淆的東西仍是得多寫,多總結
但願這篇文章對你們分清它們的使用場景有所幫助