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

nuxtjs中如何對axios二次封裝

 更新時間:2023年10月12日 08:49:03   作者:Lsir1998  
這篇文章主要介紹了nuxtjs中如何對axios二次封裝問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

nuxtjs中對axios二次封裝

plugins文件夾新建request.js

import { Message} from "element-ui";
export default function ({ $axios,redirect,$cookies}) {
    //請求域名
    if(process.env.NODE_ENV == 'development'){
        $axios.baseURL = '';
    }else if(process.env.NODE_ENV == 'debug'){
        $axios.baseURL = '';
    }else if(process.env.NODE_ENV == 'product'){
        $axios.baseURL = '';
    }
    $axios.onRequest(config => {
        //此處的$cookies為cookie-universal-nuxt,當然也可以使用其它的緩存工具類
        //loginInfo 是登錄態(tài)
        const loginInfo = $cookies.get('loginInfo')  
         //區(qū)分axios的post請求和其它請求  因為post請求為data參數(shù)而get則為params參數(shù)
        if(config.method == 'post'){
            if(loginInfo && config.data){
            //Object.assig為合并對象,將token和其它參數(shù)合并,當然和接口文檔有關(guān),有的是要求                                            
            //token放在請求頭中的,依據(jù)接口文檔而定
                config.data = Object.assign(config.data,loginInfo)
            }
        }else{
            if(loginInfo && config.params){
                config.params = Object.assign(config.params,loginInfo)
            }
        }
        return config
    })
    $axios.onResponse(response => {
        if(process.server){ //判斷是服務(wù)端還是客戶端的請求
            return response.data
        }
        //狀態(tài)碼依接口文檔而定
        if(!process.server && response.data.code == '401'){
            return Message({
                type:'error',
                message:'您還未登錄',
                duration:1500
            })
        }
        if(!process.server && response.data.code == '400'){
            Message({
                type:'error',
                message:response.data.msg,
                duration:1500
            })
            return response.data
        }
        if(!process.server && response.data.code == '404'){
            Message({
                type:'error',
                message:response.data.msg,
                duration:1500
            })
            return response.data
        }
        if(!process.server && response.data.code == '200'){
            return response.data
        }
    })
    $axios.onRequestError(err => {
        console.log(err)
    })
    $axios.onResponseError(err => {
        console.log(err)
    })
    $axios.onError(error => {
        const code = parseInt(error.response && error.response.status)
        if (code === 400) {
            redirect('/')
        }
    })
}

對api進行同一管理,在plugins文件夾下新建api.js

export default ({$axios},inject) => {
     inject('base',(params)=>$axios({
        url:'/appapi/config/base',
        method:'GET',
        params
    }))
    //多個可以繼續(xù)往后寫inject,inject第一個參數(shù)隨便取名
}

在nuxt.config.js中配置

export default {
    plugins: [
    '@/plugins/request',
    '@/plugins/api',
  ],
}

在頁面組件中使用方法

export default{
    async asyncData(app){
        const list = await app.$base({})
    },
    //methods中使用可以通過this.$base({})
}

axios二次封裝,設(shè)置請求、響應(yīng)攔截器

axios的攔截器非常好用,分為請求攔截器與響應(yīng)攔截器兩種,一般把攔截器卸載api文件下的xxx.js下,

xxx.js中配置,二次封裝

//對于axios進行二次封裝
import axios from 'axios'
//主要是要用到他的請求和攔截器(為什么要二次封裝)
//1.利用axios對象的方法create,去創(chuàng)建一個axios實例
//2.request就是axios,只不過稍微配置一下
const requests = axios.create({
    //配置對象
    baseUrl:'/api',   //基礎(chǔ)路徑,發(fā)送請求時候,代表基于哪個路徑出現(xiàn)api
    //代表請求的時間
    timeout:5000,
})

對axios函數(shù)配置了一下,下面可以直接用requests,寫攔截器

//1.利用axios對象的方法create,去創(chuàng)建一個axios實例

//2.request就是axios,只不過稍微配置一下

1.請求攔截器,在發(fā)請求之前,請求攔截器可以監(jiān)測到,可以在請求發(fā)出去之前做一些事情

requests.interceptors.request.use((config)=>{
     //config 配置對象,對象里面有一個屬性很重要,headers請求
     return config
})

2.響應(yīng)攔截器:服務(wù)器相應(yīng)數(shù)據(jù)回來以后,響應(yīng)攔截器可以監(jiān)測到,可以做一些事情

 
//響應(yīng)攔截器
requests.interceptors.response.use((re)=>{
    //成功的回調(diào)函數(shù):服務(wù)器相應(yīng)數(shù)據(jù)回來以后,響應(yīng)攔截器可以監(jiān)測到,可以做一些事情
    return res.data;
},(error)=>{
    //響應(yīng)失敗的回調(diào)函數(shù)
    return Promise.reject(new Error('faile')) //終止Promise鏈子
})

最后對外暴露就完成了axios二次封裝,設(shè)置了兩個攔截器

export default requests;

ps完整代碼

//對于axios進行二次封裝
import axios from 'axios'
//主要是要用到他的請求和攔截器(為什么要二次封裝)
//1.利用axios對象的方法create,去創(chuàng)建一個axios實例
//2.request就是axios,只不過稍微配置一下
const requests = axios.create({
    //配置對象
    baseUrl:'/api',   //基礎(chǔ)路徑,發(fā)送請求時候,代表基于哪個路徑出現(xiàn)api
    //代表請求的時間
    timeout:5000,
})
//請求攔截器,在發(fā)請求之前,請求攔截器可以監(jiān)測到,可以在請求發(fā)出去之前做一些事情
requests.interceptors.request.use((config)=>{
     //config 配置對象,對象里面有一個屬性很重要,headers請求
     return config
})
//響應(yīng)攔截器
requests.interceptors.response.use((re)=>{
    //成功的回調(diào)函數(shù):服務(wù)器相應(yīng)數(shù)據(jù)回來以后,響應(yīng)攔截器可以監(jiān)測到,可以做一些事情
    return res.data;
},(error)=>{
    //響應(yīng)失敗的回調(diào)函數(shù)
    return Promise.reject(new Error('faile')) //終止Promise鏈子
})
//對外暴露
export default requests;

總結(jié)

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

相關(guān)文章

  • vue-cli結(jié)合Element-ui基于cropper.js封裝vue實現(xiàn)圖片裁剪組件功能

    vue-cli結(jié)合Element-ui基于cropper.js封裝vue實現(xiàn)圖片裁剪組件功能

    這篇文章主要介紹了vue-cli結(jié)合Element-ui基于cropper.js封裝vue實現(xiàn)圖片裁剪組件功能,本文圖文并茂給大家介紹的非常詳細,需要的朋友可以參考下
    2018-03-03
  • Vue前端導(dǎo)出Excel文件的詳細實現(xiàn)方案

    Vue前端導(dǎo)出Excel文件的詳細實現(xiàn)方案

    在開發(fā)后臺管理系統(tǒng)的時候,很多地方都要用到導(dǎo)出excel表格,比如將table中的數(shù)據(jù)導(dǎo)出到本地,下面這篇文章主要給大家介紹了關(guān)于Vue導(dǎo)出Excel文件的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • vuejs element table 表格添加行,修改,單獨刪除行,批量刪除行操作

    vuejs element table 表格添加行,修改,單獨刪除行,批量刪除行操作

    這篇文章主要介紹了vuejs element table 表格添加行,修改,單獨刪除行,批量刪除行操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 詳解vue-cli 構(gòu)建Vue項目遇到的坑

    詳解vue-cli 構(gòu)建Vue項目遇到的坑

    本篇文章主要介紹了詳解vue-cli 構(gòu)建Vue項目遇到的坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Vue?實現(xiàn)分頁功能

    Vue?實現(xiàn)分頁功能

    Vue提供了豐富的API和組件,可以幫助開發(fā)者快速地構(gòu)建現(xiàn)代化的Web應(yīng)用程序,本文介紹了Vue如何實現(xiàn)分頁功能,包括數(shù)據(jù)的獲取、分頁器的實現(xiàn)和頁面的渲染
    2023-09-09
  • vue3的CRON表達式組件用法解讀

    vue3的CRON表達式組件用法解讀

    該文檔介紹了Cron表達式生成器的使用說明,該組件通過圖形化界面幫助用戶配置定時任務(wù)的執(zhí)行計劃,支持秒、分鐘、小時、日、月、周等時間單位的靈活配置,并實時計算并顯示最近5次執(zhí)行時間
    2026-01-01
  • vue中useVModel()的使用方法(通俗易懂)

    vue中useVModel()的使用方法(通俗易懂)

    useVModel()用來實現(xiàn)父子組件間數(shù)據(jù)的雙向綁定,若不想使用默認回調(diào),也可以自己使用emit實現(xiàn)回調(diào),這篇文章主要給大家介紹了關(guān)于vue中useVModel()使用方法的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • 淺析Vue3中的邏輯復(fù)用

    淺析Vue3中的邏輯復(fù)用

    這篇文章主要為大家詳細介紹了Vue3中邏輯復(fù)用的相關(guān)知識,文中的示例代碼簡潔易懂,對我們深入了解Vue3有一定的幫助,需要的小伙伴可以參考下
    2023-12-12
  • Vue路由模塊化配置的完整步驟

    Vue路由模塊化配置的完整步驟

    這篇文章主要給大家介紹了關(guān)于Vue路由模塊化配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • vue element實現(xiàn)表格合并行數(shù)據(jù)

    vue element實現(xiàn)表格合并行數(shù)據(jù)

    這篇文章主要為大家詳細介紹了vue element實現(xiàn)表格合并行數(shù)據(jù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評論

隆尧县| 如东县| 无极县| 镇雄县| 富裕县| 河东区| 泽州县| 神池县| 盐池县| 玉树县| 富源县| 海口市| 临沭县| 博野县| 香格里拉县| 余江县| 余姚市| 鸡东县| 广宁县| 宣城市| 宁蒗| 平顶山市| 萍乡市| 大荔县| 普兰店市| 蓬溪县| 探索| 惠东县| 中西区| 林芝县| 彝良县| 于田县| 巩留县| 和龙市| 香格里拉县| 桐庐县| 浮梁县| 宁津县| 绥化市| 运城市| 界首市|