站長資訊網
        最全最豐富的資訊網站

        uniapp如何添加請求攔截器

        uniapp添加請求攔截器的方法:1、定義LsxmRequest類并添加默認配置、攔截器與請求方法;2、后續需要自定義config與獲取接口地址,在類中添加get和set方法;3、利用Symbol特性定義四個私有變量,防止變量污染。

        uniapp如何添加請求攔截器

        本教程操作環境:windows7系統、uni-app2.5.1版本,DELL G3電腦,該方法適用于所有品牌電腦。

        uniapp添加請求攔截器的方法:

        1、利用Symbol特性定義四個私有變量,防止變量污染

        const config = Symbol('config') const isCompleteURL = Symbol('isCompleteURL') const requestBefore = Symbol('requestBefore') const requestAfter = Symbol('requestAfter')

        2、定義LsxmRequest類并添加默認配置、攔截器與請求方法

        class LsxmRequest {     //默認配置     [config] = {         baseURL: '',         header: {             'content-type': 'application/json'         },         method: 'GET',         dataType: 'json',         responseType: 'text'     }     //攔截器     interceptors = {         request: (func) => {             if (func)              {                 LsxmRequest[requestBefore] = func             }              else              {                 LsxmRequest[requestBefore] = (request) => request             }         },         response: (func) => {             if (func)              {                 LsxmRequest[requestAfter] = func             }              else              {                 LsxmRequest[requestAfter] = (response) => response             }         }     }     static [requestBefore] (config) {         return config     }     static [requestAfter] (response) {         return response     }     static [isCompleteURL] (url) {         return /(http|https)://([w.]+/?)S*/.test(url)     }          request (options = {}) {         options.baseURL = options.baseURL || this[config].baseURL         options.dataType = options.dataType || this[config].dataType         options.url = LsxmRequest[isCompleteURL](options.url) ? options.url : (options.baseURL + options.url)         options.data = options.data         options.header = {...options.header, ...this[config].header}         options.method = options.method || this[config].method         options = {...options, ...LsxmRequest[requestBefore](options)}         return new Promise((resolve, reject) => {             options.success = function (res) {                 resolve(LsxmRequest[requestAfter](res))             }             options.fail= function (err) {                 reject(LsxmRequest[requestAfter](err))             }             uni.request(options)         })     }     get (url, data, options = {}) {         options.url = url         options.data = data         options.method = 'GET'         return this.request(options)     }     post (url, data, options = {}) {         options.url = url         options.data = data         options.method = 'POST'         return this.request(options)     } }

        3、后續需要自定義config與獲取接口地址,在類中添加get和set方法:

        setConfig (func) {         this[config] = func(this[config]) } getConfig() {     return this[config]; }

        4、用自定義插件注冊的方法將apis.js(后續在main.js中需要導入apis.js)中的接口賦到自定義的Vue原型變量$lsxmApi上,為了避免每個頁面都要引入一次,在每個頁面的beforeCreate生命周期混入。

        LsxmRequest.install = function (Vue) {     Vue.mixin({         beforeCreate: function ()          {             if (this.$options.apis)              {                 console.log(this.$options.apis)                 Vue._lsxmRequest = this.$options.apis             }         }     })          Object.defineProperty(Vue.prototype, '$lsxmApi', {         get: function ()          {             return Vue._lsxmRequest.apis         }     }) } export default LsxmRequest

        5、在config.js中實例化并自定義請求配置項(此處根據項目需要在頭部加入token)與攔截器

        import LsxmRequest from './LsxmRequest' const lsxmRequest = new LsxmRequest() // 請求攔截器 lsxmRequest.interceptors.request((request) => {     if (uni.getStorageSync('token')) {         request.header['token'] = uni.getStorageSync('token');     }     return request }) // 響應攔截器 lsxmRequest.interceptors.response((response) => {     console.log('beforeRespone',response);     // 超時重新登錄     if(response.data.isOverTime){     uni.showModal({             title:'提示',             content:'您已超時,請重新登錄!',             showCancel:false,             icon:'success',             success:function(e){                 if(e.confirm){                     uni.redirectTo({                         url: '/pages/login/login'                     })                 }             }         });      }     else     {         return response;     } }) // 設置默認配置 lsxmRequest.setConfig((config) => {     config.baseURL = 'http://xxxxx.com'          if (uni.getStorageSync('token')) {         config.header['token'] = uni.getStorageSync('token');     }     return config; }) export default lsxmRequest

        6、main.js中引入,將apis掛載到Vue上

        import LsxmRequest from './service/LsxmRequest.js' import apis from './service/apis.js' import lsxmRequest from './service/config.js' Vue.use(LsxmRequest) Vue.prototype.baseDomain = lsxmRequest.getConfig().baseURL App.mpType = 'app' const app = new Vue({     store,     apis,     ...App }) app.$mount()

        7、需要添加接口時,只需在apis.js中添加接口即可(后續可將apis.js中的接口按照功能拆分,模塊化管理)

        import lsxmRequest from './config.js' export default{   apis:{         //獲取驗證用戶令牌         getLoginToken(data){             return lsxmRequest.post('/xxx/xxx/getLoginToken', data)         },         //登錄         login(data){             return lsxmRequest.post('/xxx/xxx/login', data)         }         } }

        8、至此,頁面中即可使用

        this.$lsxmApi.getLoginToken({}).then((resToken) => {         console.log(resToken) }

        了解

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产99视频精品免视看7| 久久国产精品久久久| 91麻豆精品国产自产在线观看一区 | 亚州日韩精品专区久久久| 欧美大片日韩精品| 国产AV国片精品| 精品无码国产自产拍在线观看| 婷婷成人国产精品| 国产在线精品观看免费观看| 久久精品成人国产午夜| 精品一区二区三区波多野结衣| 一区二区三区精品高清视频免费在线播放 | 四虎影视884a精品国产四虎| 成人精品视频99在线观看免费| 亚洲AV无码久久精品蜜桃| 欧美精品一区二区三区免费| 精品国产91久久久久久久a| 国产精品高清在线观看| www.日韩精品| 国产av无码专区亚洲国产精品| 3级黄性日本午夜精品| 麻豆精品不卡国产免费看| 国产成人精品日本亚洲专| 国产suv精品一区二区33| 国产日产韩国精品视频| 国产精品视频二区不卡| 国产精品亚洲日韩欧美色窝窝色欲| 久久久精品人妻一区二区三区蜜桃 | 日韩精品中文字幕第2页| 精品国产乱码久久久久久浪潮| 99九九精品免费视频观看| 亚洲欧洲国产日韩精品| 97久视频精品视频在线老司机| 93精91精品国产综合久久香蕉| 99爱在线视频这里只有精品 | 国产精品v片在线观看不卡| 国产精品视频一区二区噜噜| 囯产精品一品二区三区| 精品国产_亚洲人成在线高清| 亚洲国产综合91精品麻豆| 成人国产一区二区三区精品|