最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue中的請求攔截器和響應(yīng)攔截器用法及說明

 更新時(shí)間:2023年05月24日 10:20:31   作者:小白在線學(xué)前端  
這篇文章主要介紹了Vue中的請求攔截器和響應(yīng)攔截器用法及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue請求攔截器和響應(yīng)攔截器用法

今天就講一下什么是請求攔截器,和請求攔截器的作用,好了,多余的話我就不說了,馬上開始今天的講解

開始啦

請求攔截器

請求攔截器的作用是:

在請求發(fā)送前進(jìn)行一些操作,例如在每個(gè)請求體里面加上token,統(tǒng)一做了處理的,如果要更改也是非常的容易。

關(guān)于攔截

這里只說原理,前端的請求,最終離不開Ajax,像Vue的Vue-Resource、Axios,都只是對Ajax進(jìn)行了統(tǒng)一的封裝,它暴露出來的攔截器,其實(shí)就是寫了一個(gè)方法,把Ajax寫在這個(gè)方法里面(我們先說請求攔截器),在執(zhí)行的時(shí)候,先將請求時(shí)要添加給請求頭的那些數(shù)據(jù)(Token、后端要的加密的密碼)先執(zhí)行一遍,都賦值給一個(gè)變量,然后再統(tǒng)一傳給Ajax,接下來,就是執(zhí)行Ajax,這就是所謂的請求攔截器,其實(shí)就是先執(zhí)行要添加的數(shù)據(jù),然后再執(zhí)行Ajax,如果把這個(gè)添加數(shù)據(jù)的過程抽出來,就成了所謂的請求攔截器了

// 請求超時(shí)時(shí)間
axios.defaults.timeout = 120000
// 添加請求攔截器
axios.interceptors.request.use(
  config => {
    // 在發(fā)送請求之前做些什么
    // 判斷是否存在token,如果存在將每個(gè)頁面header都添加token
    if (window.sessionStorage.getItem('DT')) {
      // 請求頭配置全局token
      config.headers.DT = window.sessionStorage.getItem('DT')
    }
    return config
  },
  err => {
    // 對請求錯(cuò)誤做些什么
    Vue.prototype.$message.error('請求超時(shí)')
    return Promise.reject(err)
  }
)

響應(yīng)攔截器

響應(yīng)攔截器的作用就是

在接收到響應(yīng)后再進(jìn)行一些操作,例如在服務(wù)器返回登錄狀態(tài)失效的時(shí)候,需要重登錄,跳轉(zhuǎn)到登錄頁面,

響應(yīng)攔截器,就是是在請求結(jié)果的返回后的同時(shí),先不直接導(dǎo)出,而是先對響應(yīng)碼等等的進(jìn)行處理,處理好之后再導(dǎo)出給頁面,如果將這個(gè)對象響應(yīng)碼的處理過程抽出來,就成了所謂的響應(yīng)攔截器

代碼如下

// 響應(yīng)攔截器
axios.interceptors.response.use(
  response => {
    // res是響應(yīng)的結(jié)果
    switch (response.data.code) {
      case 401:
        // 登錄失效
        // 響應(yīng)成功的攔截
        console.log('響應(yīng)攔截器:')
        // 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('未知錯(cuò)誤')
        }
        break
      case 500:
        // 錯(cuò)誤
        if (response.data.message !== null) {
          Vue.prototype.$message.error(response.data.message)
        } else {
          Vue.prototype.$message.error('未知錯(cuò)誤')
        }
        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) // 返回接口返回的錯(cuò)誤信息
    } else {
      // 返回狀態(tài)碼不為200時(shí)候的錯(cuò)誤處理
      Vue.prototype.$message.error(err.toString())
      return Promise.resolve(err)
    }
  }
)

頁面中請求接口時(shí):

// 用戶登錄提交
    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')
        }
      })
    }

心得:

  • 請求攔截器:其實(shí)就是先執(zhí)行要添加的數(shù)據(jù),然后再執(zhí)行Ajax,如果把這個(gè)添加數(shù)據(jù)的過程抽出來,就成了所謂的請求攔截器了
  • 響應(yīng)攔截器:就是是在請求結(jié)果的返回后的同時(shí),先不直接導(dǎo)出,而是先對響應(yīng)碼等等的進(jìn)行處理,處理好之后再導(dǎo)出給頁面,如果將這個(gè)對象響應(yīng)碼的處理過程抽出來,就成了所謂的響應(yīng)攔截器

使用axios請求攔截器和響應(yīng)攔截器

在使用一些前后端會話時(shí),需要在請求頭中攜帶一些特殊請求頭,這樣,就需要設(shè)置請求攔截器和響應(yīng)攔截器

開發(fā)項(xiàng)目時(shí),由于后端使用了token令牌,登錄后在前端保存,然后每次請求都要攜帶token,將這些配置寫在main.js文件中是很亂的不易于閱讀,額外配置了axios請求配置模塊 這樣在以后對于請求響應(yīng)都能更好的配置而不會影響其他配置

如果不使用請求攔截,那么對每一條請求每一個(gè)狀態(tài)都要特殊處理,如果請求特殊狀態(tài)有數(shù)十個(gè),每個(gè)頁面有很多請求,那么頁面會變得很長很臃腫,不好維護(hù)。

如何使用?

1.在utils文件夾中創(chuàng)建 一個(gè)request.js文件

文件內(nèi)容為(這里必須export這個(gè)配置后,才能被):

const service = axios.create({
    timeout: 6000  //請求超時(shí)為6秒
}); //創(chuàng)建一個(gè)axios, 命名為service

2.先寫請求攔截器的邏輯代碼

//請求攔截器
 service.interceptors.request.use(function(config) {
    // 處理請求之前的配置
    //在請求頭headers加入token校驗(yàn)
     config.headers["token"] = "aded434088c7bcc595ec1c36c24aea1c"
     return config
 }, function(error) {
      // 請求失敗的處理
     return Promise.reject(error);
 });

3.接著寫響應(yīng)攔截器的邏輯代碼

service.interceptors.response.use(function (response) {
    // 在接收響應(yīng)做些什么,例如跳轉(zhuǎn)到登錄頁
    ......
    return response;
  }, function (error) {
    // 對響應(yīng)錯(cuò)誤做點(diǎn)什么
    return Promise.reject(error);
  });

4.在統(tǒng)一管理的接口文件api.js使用

5.移除攔截器的方法

axios.interceptors.request.eject(service); //service為第一步中創(chuàng)建的axios

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue將將后端返回的list數(shù)據(jù)轉(zhuǎn)化為樹結(jié)構(gòu)的實(shí)現(xiàn)

    Vue將將后端返回的list數(shù)據(jù)轉(zhuǎn)化為樹結(jié)構(gòu)的實(shí)現(xiàn)

    本文主要介紹了Vue將將后端返回的list數(shù)據(jù)轉(zhuǎn)化為樹結(jié)構(gòu)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 八個(gè)一看就覺得很棒的Vue開發(fā)技巧分享

    八個(gè)一看就覺得很棒的Vue開發(fā)技巧分享

    在用Vue開發(fā)的這幾年里,我學(xué)到了很多有用的技巧,所以這篇文章主要給大家分享介紹了八個(gè)一看就覺得很棒的Vue開發(fā)技巧,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Vue安裝Element?Plus全過程

    Vue安裝Element?Plus全過程

    這篇文章主要介紹了Vue安裝Element?Plus全過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue 根據(jù)條件判斷van-tab的顯示方式

    Vue 根據(jù)條件判斷van-tab的顯示方式

    這篇文章主要介紹了Vue 根據(jù)條件判斷van-tab的顯示方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue項(xiàng)目引入字體.ttf的方法

    vue項(xiàng)目引入字體.ttf的方法

    今天小編就為大家分享一篇vue項(xiàng)目引入字體.ttf的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue實(shí)現(xiàn)在線預(yù)覽pdf文件功能(利用pdf.js/iframe/embed)

    Vue實(shí)現(xiàn)在線預(yù)覽pdf文件功能(利用pdf.js/iframe/embed)

    項(xiàng)目要求需要預(yù)覽pdf文件,網(wǎng)上找了很久,發(fā)現(xiàn)pdf.js的效果,這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)在線預(yù)覽pdf文件功能,主要利用pdf.js/iframe/embed來實(shí)現(xiàn)的,需要的朋友可以參考下
    2021-06-06
  • vue iview實(shí)現(xiàn)分頁功能

    vue iview實(shí)現(xiàn)分頁功能

    這篇文章主要為大家詳細(xì)介紹了vue iview實(shí)現(xiàn)分頁功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vue實(shí)現(xiàn)多級菜單效果

    vue實(shí)現(xiàn)多級菜單效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)多級菜單效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 5分鐘學(xué)會Vue動畫效果(小結(jié))

    5分鐘學(xué)會Vue動畫效果(小結(jié))

    這篇文章主要介紹了5分鐘學(xué)會Vue動畫效果(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • vue 中的keep-alive實(shí)例代碼

    vue 中的keep-alive實(shí)例代碼

    這篇文章主要介紹了vue中的keep-alive實(shí)例代碼,vue實(shí)現(xiàn)組件信息緩存的方法,在文中也給大家提到,需要的朋友可以參考下
    2018-07-07

最新評論

广宗县| 太原市| 仙桃市| 楚雄市| 军事| 秭归县| 隆林| 池州市| 图们市| 全椒县| 新宁县| 万载县| 启东市| 隆林| 扎囊县| 张家界市| 新和县| 平顺县| 渭源县| 丰原市| 云安县| 巫溪县| 蒲江县| 洛阳市| 宝坻区| 巴塘县| 辽阳市| 清徐县| 高唐县| 宜昌市| 玉田县| 丹江口市| 乌拉特中旗| 彭州市| 根河市| 乡城县| 建昌县| 冷水江市| 冀州市| 兰考县| 大理市|