久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

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

      uniapp使用axios無(wú)法請(qǐng)求怎么辦

      uniapp使用axios無(wú)法請(qǐng)求的解決辦法:首先在根目錄新建一個(gè)【axios.js】文件,在該文件中配置一個(gè)新的axios;然后使用這個(gè)適配器并設(shè)置重新發(fā)起請(qǐng)求的次數(shù)以及每次重新請(qǐng)求的間隔時(shí)間。

      uniapp使用axios無(wú)法請(qǐng)求怎么辦

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

      推薦(免費(fèi)):uni-app開發(fā)教程

      uniapp使用axios無(wú)法請(qǐng)求的解決辦法:

      在根目錄新建一個(gè)axios.js文件,在該文件中配置一個(gè)新的axios

      import axios from "axios"; const service = axios.create({   withCredentials: true,   crossDomain: true,   baseURL: '***',   timeout: 6000 })

      在根目錄建一個(gè)lib文件夾,在這個(gè)文件夾里建一個(gè)adapter.js文件,該文件配置了基于uniapp的axios適配,記得拋出這個(gè)適配器

      import settle from "axios/lib/core/settle" import buildURL from "axios/lib/helpers/buildURL" /* 格式化路徑 */ const URLFormat = function (baseURL, url) {   return url.startsWith("http") ? url : baseURL } /* axios適配器配置 */ const adapter = function (config) {   return new Promise((resolve, reject) => {     uni.request({       method: config.method.toUpperCase(),       url: buildURL(URLFormat(config.baseURL, config.url), config.params, config.paramsSerializer),       header: config.headers,       data: config.data,       dataType: config.dataType,       responseType: config.responseType,       sslVerify: config.sslVerify,       complete: function complete(response) {         response = {           data: response.data,           status: response.statusCode,           errMsg: response.errMsg,           header: response.header,           config: config         };         settle(resolve, reject, response);       }     })   }) } export default adapter;

      在根目錄的axios.js文件中,使用這個(gè)適配器并設(shè)置重新發(fā)起請(qǐng)求的次數(shù)以及每次重新請(qǐng)求的間隔時(shí)間

      import adapter from "./lib/adapter" service.defaults.adapter = adapter; service.defaults.retry = 5; // 設(shè)置請(qǐng)求次數(shù) service.defaults.retryDelay = 1000;// 重新請(qǐng)求時(shí)間間隔

      設(shè)置一個(gè)請(qǐng)求完成后的攔截器,如果響應(yīng)頭中的狀態(tài)碼為200表示成功,將請(qǐng)求得到的數(shù)據(jù)返回,否則一律視為錯(cuò)誤請(qǐng)求,需要返回一個(gè)Promise。在lib中建立一個(gè)axiosError.js在里面處理失敗的請(qǐng)求。

      service.interceptors.response.use(res => {   if (res.status == 200) {     return res;   } else {     return Promise.reject(res);   } }, err => axiosError(err, service))

      axiosError.js中需要傳入axios攔截器截到的錯(cuò)誤以及我們新創(chuàng)建的這個(gè)axios,這個(gè)錯(cuò)誤處理頁(yè)面只是充當(dāng)一個(gè)分配器的角色,我們可以根據(jù)響應(yīng)頭中的狀態(tài)進(jìn)行處理該錯(cuò)誤,未處理的錯(cuò)誤在使用時(shí)處理,返回Promise.reject

      // 處理401錯(cuò)誤代碼 import Error401 from "../handlers/401Error"; export default function (err, axios) {   const errStatus = err.response.status;   if (errStatus == 401) {     return Error401(err); // 401沒有權(quán)限,重新請(qǐng)求設(shè)置token   } else {     return Promise.reject(err);   } }

      處理401錯(cuò)誤代碼,當(dāng)請(qǐng)求失敗并且響應(yīng)頭中的狀態(tài)碼為401時(shí),是我沒沒有權(quán)限去請(qǐng)求,可以根據(jù)項(xiàng)目來(lái)進(jìn)行處理,我們是需要攜帶token,所以401為token未攜帶或失效,請(qǐng)求時(shí)無(wú)需傳入token,axios遇到401會(huì)自動(dòng)攜帶這個(gè)token重新去請(qǐng)求。在根目錄建一個(gè)handlers文件夾,在里面建一個(gè)401Error.js用于處理401的錯(cuò)誤。

      這里使用到Vuex,需要引入Vuex,因?yàn)楂@取token、設(shè)置token的方法以及token都放在里面!?。∈褂胹tore.dispatch("getToken")得到token后將token設(shè)置到請(qǐng)求頭Authorization

      import interceptorsError from "../lib/interceptorsError"; import store from 'store/index' /* 需要傳入axios錯(cuò)誤配置 */ export default function (err, axios) {   const config = err.config;// axios請(qǐng)求配置   store.dispatch("getToken").then(function () {     config.headers["Authorization"] = store.state.cnrToken.cnr_token;   });   err.config = config;   return interceptorsError(axios, config); }

      一切準(zhǔn)備就緒之后需要重新請(qǐng)求,在根目錄建一個(gè)interceptorsError.js文件,用于重新執(zhí)行請(qǐng)求,這個(gè)方法需要一個(gè)請(qǐng)求配置,只需要把我們上一個(gè)請(qǐng)求的配置傳入即可。

      export default function (axios, config) {   // 如果配置不存在或未設(shè)置重試選項(xiàng),reject   if (!config || !config.retry) return Promise.reject(err);   // 設(shè)置變量以跟蹤重試計(jì)數(shù)   config.__retryCount = config.__retryCount || 0;   // 如果重試次數(shù)大于最大重試次數(shù),reject   if (config.__retryCount >= config.retry) {     return Promise.reject(err);   }   // 每重試一次記錄一次重試次數(shù)   config.__retryCount += 1;   // 重試間隔時(shí)間   const backoff = new Promise(function (resolve) {     setTimeout(function () {       resolve();     }, config.retryDelay || 1000);   });   return backoff.then(function () {     return axios(config);   }); }

      這是我Vuex中的代碼

      /*  * @Author: UpYou  * @Date: 2020-09-25 16:30:13  * @LastEditTime: 2020-09-25 21:32:56  * @Descripttion: token  *   */ const state = {   cnr_token: '',   POST_KEYS: {     ...獲取token需要的驗(yàn)證信息...   } }; const mutations = {   /* 設(shè)置token */   SET_CNRTOKEN(state, Payload) {     if (Payload.startsWith("Bearer"))       state.cnr_token = Payload;     else state.cnr_token = "Bearer" + Payload;   } } const actions = {   /* 向服務(wù)器獲取token */   getToken(context, args) {     return new Promise(function (resolve, reject) {       uni.request({         url: "token服務(wù)器地址",         data: { ...context.state.POST_KEYS },         method: "get",         async success(res) {           await context.commit('SET_CNRTOKEN', res.data.access_token)           await resolve(res.data)         },         fail: reject       });     })   } } export default {   state, mutations, actions, }

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