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