請求攔截器
請求攔截器的作用是在請求發送前進行一些操作,例如在每個請求體里加上token,統一做了處理如果以后要改也非常容易。

代碼:
// 請求超時時間 axios.defaults.timeout = 120000 // 添加請求攔截器 axios.interceptors.request.use( config => { // 在發送請求之前做些什么 // 判斷是否存在token,如果存在將每個頁面header都添加token if (window.sessionStorage.getItem('DT')) { // 請求頭配置全局token config.headers.DT = window.sessionStorage.getItem('DT') } return config }, err => { // 對請求錯誤做些什么 Vue.prototype.$message.error('請求超時') return Promise.reject(err) } )
響應攔截器
響應攔截器的作用是在接收到響應后進行一些操作,例如在服務器返回登錄狀態失效,需要重新登錄的時候,跳轉到登錄頁。
響應攔截器也是一樣如此,就是在請求結果返回后,先不直接導出,而是先對響應碼等等進行處理,處理好后再導出給頁面,如果將這個對響應碼的處理過程抽出來,就成了所謂的響應攔截器。


代碼:
// 響應攔截器 axios.interceptors.response.use( response => { // res是響應的結果 switch (response.data.code) { case 401: // 登錄失效 // 響應成功的攔截 console.log('響應攔截器:') // console.log(response.data) Vue.prototype.$message.error(response.data.message) sessionStorage.removeItem('DT') router.push('/login') break case 404: if (response.data.message !== null) { Vue.prototype.$message.error(response.data.message) } else { Vue.prototype.$message.error('未知錯誤') } break case 500: // 錯誤 if (response.data.message !== null) { Vue.prototype.$message.error(response.data.message) } else { Vue.prototype.$message.error('未知錯誤') } break default: return response } return response }, err => { if (err.response.data.message) { Vue.prototype.$message.error(err.response.data.message) return Promise.reject(err.response.data.message) // 返回接口返回的錯誤信息 } else { // 返回狀態碼不為200時候的錯誤處理 Vue.prototype.$message.error(err.toString()) return Promise.resolve(err) } } )
頁面中請求接口時:

代碼:
// 用戶登錄提交 login() { // debugger this.$refs.loginFormRef.validate(async valid => { if (!valid) return if (valid) {const userInfo = { username: this.loginForm.username, password: this.loginForm.password } // 登錄之前去除token window.sessionStorage.removeItem('DT') const { data: res } = await this.$http.post('/system/login', userInfo) if (res.code !== 200) { this.initCaptcha() return } this.$message.success('登錄成功') window.sessionStorage.setItem('DT', res.result.token) this.$router.push('/main') } }) }
