亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    uniapp如何添加請(qǐng)求攔截器

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

    uniapp如何添加請(qǐng)求攔截器

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

    uniapp添加請(qǐng)求攔截器的方法:

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

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

    2、定義LsxmRequest類并添加默認(rèn)配置、攔截器與請(qǐng)求方法

    class LsxmRequest {     //默認(rèn)配置     [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、后續(xù)需要自定義config與獲取接口地址,在類中添加get和set方法:

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

    4、用自定義插件注冊(cè)的方法將apis.js(后續(xù)在main.js中需要導(dǎo)入apis.js)中的接口賦到自定義的Vue原型變量$lsxmApi上,為了避免每個(gè)頁(yè)面都要引入一次,在每個(gè)頁(yè)面的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中實(shí)例化并自定義請(qǐng)求配置項(xiàng)(此處根據(jù)項(xiàng)目需要在頭部加入token)與攔截器

    import LsxmRequest from './LsxmRequest' const lsxmRequest = new LsxmRequest() // 請(qǐng)求攔截器 lsxmRequest.interceptors.request((request) => {     if (uni.getStorageSync('token')) {         request.header['token'] = uni.getStorageSync('token');     }     return request }) // 響應(yīng)攔截器 lsxmRequest.interceptors.response((response) => {     console.log('beforeRespone',response);     // 超時(shí)重新登錄     if(response.data.isOverTime){     uni.showModal({             title:'提示',             content:'您已超時(shí),請(qǐng)重新登錄!',             showCancel:false,             icon:'success',             success:function(e){                 if(e.confirm){                     uni.redirectTo({                         url: '/pages/login/login'                     })                 }             }         });      }     else     {         return response;     } }) // 設(shè)置默認(rèn)配置 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、需要添加接口時(shí),只需在apis.js中添加接口即可(后續(xù)可將apis.js中的接口按照功能拆分,模塊化管理)

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

    8、至此,頁(yè)面中即可使用

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

    了解

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)