請求攔截器和響應攔截器


請求攔截器

請求攔截器的作用是在請求發送前進行一些操作,例如在每個請求體里加上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')
        }
      })
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM