路由攔截(vue+axios實現前端登入攔截)
第二步:***
http配置(結合ui框架)
前言:如果你是求職者,專案寫了運用了axios,面試官可能會問你:
1.為什麼 axios 既可以當函式呼叫,也可以當物件使用,比如axios({})、axios.get。裡面包含對於封裝以及環境切換的2.簡述 axios 呼叫流程。
3.有用過***嗎?原理是怎樣的?
4.有使用axios的取消功能嗎?是怎麼實現的?
5.為什麼支援瀏覽器中傳送請求也支援node傳送請求?
諸如這類問題
1. 語法簡潔,更加語義化
2. 基於標準 promise 實現,支援 async/await
3. 同構方便,使用 isomorphic-fetch
4. 更加底層,提供的api豐富(request, response)
5. 脫離了xhr
axios是支援promise的(鏈式寫法),主要是用來向後台傳送請求
axios可以支援併發請求,可以同時請求多個介面。
axios提供了***、catch捕獲
axios可以防止csrf
(跨站請求偽造) 釣魚**
a頁面登入註冊的時候,跳入b頁面,
b頁面可以獲取你的cookie資訊,然後惡意向別的**散發一些郵件或者其他的東西。
axios/fetch是基於promise,後者主要利用callback的形式 $.
ajax(}
)fetch脫離了xhr,是新的語法,預設不傳cookie,另外也監聽不到請求的進度
axios.
get(url,})
.then
(res=
>).
catch
(err=
>);
axios.
post
(url,).
then
(res=
>).
catch
(err=
>);
axios
(,headers}).
then
(res=
>..
...)
axios封裝:
第一步:路由攔截
首先在定義路由的時候就需要多新增乙個自定義欄位requireauth,用於判斷該路由的訪問是否需要登入。如果使用者已經登入,則順利進入路由,
否則就進入登入頁面。
const routes =[,
, component: repository
},];定義完路由後,我們主要是利用vue-router提供的鉤子函式beforeeach
()對路由進行判斷。
router.
beforeeach
((to, from, next)
=>
else
// 將跳轉的路由path作為引數,登入成功後跳轉到該路由})
}}else})
每個鉤子方法接收三個引數:
* to: route: 即將要進入的目標 路由物件
* from: route: 當前導航正要離開的路由
* next: function: 一定要呼叫該方法來 resolve 這個鉤子。執行效果依賴 next 方法的呼叫引數。
*next()
: 進行管道中的下乙個鉤子。如果全部鉤子執行完了,則導航的狀態就是 confirmed (確認的)。
*next
(false
): 中斷當前的導航。如果瀏覽器的 url 改變了(可能是使用者手動或者瀏覽器後退按鈕),那麼 url 位址會重置到 from 路由對應的位址。
*next
(『/』) 或者 next()
: 跳轉到乙個不同的位址。當前的導航被中斷,然後進行乙個新的導航。
確保要呼叫 next 方法,否則鉤子就不會被 resolved。
其中,to.meta中是我們自定義的資料,其中就包括我們剛剛定義的requireauth欄位。
通過這個欄位來判斷該路由是否需要登入許可權。需要的話,同時當前應用不存在token,
則跳轉到登入頁面,進行登入。登入成功後跳轉到目標路由。
登入攔截到這裡就結束了嗎?並沒有。這種方式只是簡單的前端路由控制,
並不能真正阻止使用者訪問需要登入許可權的路由。還有一種情況便是:當前token失效了,
但是token依然儲存在本地。這時候你去訪問需要登入許可權的路由時,實際上應該讓使用者重新登入。
這時候就需要結合 http *** + 後端介面返回的http 狀態碼來判斷。
http request***要想統一處理所有http請求和響應,就得用上 axios 的***。通過配置http response inteceptor,當後端介面返回401 unauthorized(未授權),讓使用者重新登入。
// 返回介面返回的錯誤資訊})
;
首先我們要明白設定***的目的是什麼,當我們需要統一處理http請求和響應時我們通過設定***處理方便很多這個專案我引入了vant ui框架,所以我是結合vant中loading和message元件來處理的.我們可以單獨建立乙個http的js檔案處理axios,再到main.js中引入.
// 引入axios以及vant ui中的loading和message元件
import axios from 'axios'
import
from 'vant-ui'
// 超時時間
axios.defaults.timeout = 5000
// http請求***
var loadinginstace
axios.interceptors.request.use(config =>
) return config
}, error =>
) return promise.reject
(error)})
// http響應***
axios.interceptors.response.use(data =>
, error =>
) return promise.reject
(error)})
export default axios
這樣我們就統一處理了http請求和響應的攔截.當然我們可以根據具體的業務要求更改攔截中的處理.
Vue axios 實現http攔截及路由攔截例項
現如今,每個前端對於vue都不會陌生,vue框架是如今最流行的前端框架之一,其勢頭直追react.最近我用vue做了乙個專案,下面便是我從中取得的一點收穫.基於現在用vue webpack搭建專案的文件已經有很多了,我就不再累述了.技術棧vue2.0 vue router axios 首先我們要明白...
Vue axios 實現http攔截及路由攔截
在整1個小東東,改下試試,原來的乙個東東改動。中間需要用到 使用者許可權和攔截,看了vue2的方式。看到這文章,不錯,收藏了 用到了 http攔截 和 路由攔截 就不扒了,可過去看文章 建議方式 http攔截建1個獨立的檔案,在 main 中引入 路由正常應該都是給 弄成1個獨立檔案,在main 中...
Vue axios 實現http攔截及路由攔截
在整1個小東東,改下試試,原來的乙個東東改動。中間需要用到 使用者許可權和攔截,看了vue2的方式。看到這文章,不錯,收藏了 用到了 http攔截 和 路由攔截 就不扒了,可過去看文章 建議方式 http攔截建1個獨立的檔案,在 main 中引入 路由正常應該都是給 弄成1個獨立檔案,在main 中...