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

基于axios封裝fetch方法及調(diào)用實(shí)例

 更新時(shí)間:2018年02月05日 10:23:55   作者:風(fēng)翻火焰  
下面小編就為大家分享一篇基于axios封裝fetch方法及調(diào)用實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

基礎(chǔ)axios用法請(qǐng)看axios官網(wǎng)

//依賴(lài)于axios對(duì)私有ajax進(jìn)行修改
import Qs from 'qs'
import axios from 'axios'
import router from 'router/index'
import {errorPrompt, loading, closeLoading} from 'util/util'
export const status = {
 SUCCESS: '100',
 NET_ERR: '101', // 網(wǎng)絡(luò)連接異常,請(qǐng)稍候再試
 BIZ_ERR: '103', // 業(yè)務(wù)請(qǐng)求異常
 NO_AUTH: '104'
}
export function fetch(options) {
 return new Promise((resolve, reject) => {
 let instance = axios.create({
  baseURL: process.env.BASE_API,
  timeout: 2000,
  headers: {
  // "tracecode": window.encodeURIComponent(JSON.stringify({"ua":"","cv":"20161230","token":"3dwo0onUUsPKVJcP8tk","os":"windows10","app":"kind","ws":"1*1","pkey":"f8caf7d7-a5d4-4710-b06f-28a922b6a467"}))
  "tracecode": commonBizHeader(isManager(options)),
  'Content-Type': 'application/x-www-form-urlencoded'
  },
  transformRequest: [function (data) {
  // Do whatever you want to transform the data
  let ret = ''
  for (let it in data) {
   ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
  }
  return ret
  }]
 });
 instance.interceptors.request.use(function (response) {
  // 請(qǐng)求攔截
  loading();
  return response;
 }, function (error) {
  console.log('error 請(qǐng)求攔截 : ', error)
  return Promise.reject(error);
 });
 instance(options)
  .then(response => {
   const res = response.data;
   if (res.errorCode != status.SUCCESS) {
   switch (res.errorCode) {
    case status.NET_ERR: {
    errorPrompt(res.errorMsg)
    reject(res)
    break;
    }
    case status.BIZ_ERR: {
    errorPrompt(res.errorMsg)
    reject(res)
    break;
    }
    case status.NO_AUTH: {
    errorPrompt(res.errorMsg)
    let session = require("storejs")
    if (isManager(options)) { // 管理端
     session.remove("managerUserToken")
     router.push({path: '/manager/login'})
    } else {
     session.remove("clientUserToken")
     router.push({path: '/client/login'})
    }
    reject(res)
    break
    }
   }
   }
   closeLoading();
   resolve(res);
  }).catch(error => {
   closeLoading();
   errorPrompt('網(wǎng)絡(luò)連接錯(cuò)誤,請(qǐng)檢查您的網(wǎng)絡(luò)')
   console.log('error', error); // for debug
   reject(error);
  });
 });
}
function commonBizHeader (isManager) {
 let session = require("storejs");
 let params = {}
 params['ua'] = window.navigator.userAgent.toLowerCase()
 params['cv'] = '123456'
 params['ws'] = window.screen.height + '*' + window.screen.width
 params['token'] = "123456"
 params['os'] = window.navigator.appCodeName
 if (isManager) {
 params['token'] = session.get('managerUserToken') // 管理 - 用戶(hù)令牌
 } else {
 params['token'] = session.get('clientUserToken') // 用戶(hù) - 用戶(hù)令牌
 }
 params['app'] = 'kind'
 let UUID = session.get('pkey')
 if (!UUID) {
 UUID = getUUID()
 window.localStorage.setItem('pkey', UUID)
 }
 return encodeURIComponent(JSON.stringify(params))
}
function isManager(options) {
 return options && options.url && options.url.indexOf("/api/worker") != -1
}
/**
 * 獲取UUID
 * @returns {string}
 */
export function getUUID() {
 let len = 32 // 32長(zhǎng)度
 let radix = 16 // 16進(jìn)制
 let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
 let uuid = []
 let i
 radix = radix || chars.length
 if (len) {
 for (i = 0; i < len; i++) {
  uuid[i] = chars[0 | Math.random() * radix]
 }
 } else {
 var r
 uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
 uuid[14] = '4'
 for (i = 0; i < 36; i++) {
  if (!uuid[i]) {
  r = 0 | Math.random() * 16
  uuid[i] = chars[(i === 19) ? (r & 0x3) | 0x8 : r]
  }
 }
 }
 return uuid.join('').toLowerCase()
}

這是在vue的項(xiàng)目中:在api中調(diào)用方法如下(react剛開(kāi)始學(xué),還在做簡(jiǎn)單demo)

import {fetch} from 'api/fetch'
export const callAuthCode = (userPhone) => {
 return fetch({
 url: '/api/auth/code',
 method: 'post',
 data: ({
  userPhone: userPhone,
 }),
 })
}

因?yàn)槲覀冞@邊的后臺(tái)要求嚴(yán)格區(qū)分get/post請(qǐng)求,所以封裝的方法調(diào)用中必須帶有method,如后臺(tái)已經(jīng)處理好,全部可進(jìn)行post請(qǐng)求,則可以參照axios官網(wǎng)里面將方法全部改為.post

關(guān)于fetch方法的說(shuō)明:主要進(jìn)行封裝了請(qǐng)求攔截,響應(yīng)攔截,默認(rèn)請(qǐng)求體由json格式轉(zhuǎn)換form格式,當(dāng)然,這些都是在axios官網(wǎng)里可以找到的,不過(guò)是集合下了而已

關(guān)于請(qǐng)求頭部分請(qǐng)不要直接套用,這是我們這邊后臺(tái)要求特殊配置的,后臺(tái)接口三端共用,必須區(qū)分是哪里在調(diào)用

以上這篇基于axios封裝fetch方法及調(diào)用實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何使用vue slot創(chuàng)建一個(gè)模態(tài)框的實(shí)例代碼

    如何使用vue slot創(chuàng)建一個(gè)模態(tài)框的實(shí)例代碼

    這篇文章主要介紹了如何使用vue slot創(chuàng)建一個(gè)模態(tài)框,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Vue路由跳轉(zhuǎn)步驟詳解

    Vue路由跳轉(zhuǎn)步驟詳解

    這篇文章主要介紹了?Vue路由跳轉(zhuǎn)步驟詳解,主要介紹當(dāng)訪問(wèn)API成功后跳轉(zhuǎn)到新的Vue頁(yè)面怎么處理,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • 快速解決vue在ios端下點(diǎn)擊響應(yīng)延時(shí)的問(wèn)題

    快速解決vue在ios端下點(diǎn)擊響應(yīng)延時(shí)的問(wèn)題

    今天小編就為大家分享一篇快速解決vue在ios端下點(diǎn)擊響應(yīng)延時(shí)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Vue組件間通信方法總結(jié)(父子組件、兄弟組件及祖先后代組件間)

    Vue組件間通信方法總結(jié)(父子組件、兄弟組件及祖先后代組件間)

    這篇文章主要給大家介紹了關(guān)于Vue組件間通信的相關(guān)資料,其中包括父子組件、兄弟組件及祖先后代組件間的通信,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 如何使用Vue3設(shè)計(jì)實(shí)現(xiàn)一個(gè)Model組件淺析

    如何使用Vue3設(shè)計(jì)實(shí)現(xiàn)一個(gè)Model組件淺析

    v-model在Vue里面是一個(gè)語(yǔ)法糖,數(shù)據(jù)的雙向綁定,本質(zhì)上還是通過(guò) 自定義標(biāo)簽的attribute傳遞和接受,下面這篇文章主要給大家介紹了關(guān)于如何使用Vue3設(shè)計(jì)實(shí)現(xiàn)一個(gè)Model組件的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • vuex存儲(chǔ)數(shù)據(jù)的幾種方法實(shí)例詳解

    vuex存儲(chǔ)數(shù)據(jù)的幾種方法實(shí)例詳解

    在瀏覽網(wǎng)頁(yè)時(shí)我們有些時(shí)候需要記住一些用戶(hù)選擇的信息,比如登陸時(shí)我們?nèi)绻x擇了記住密碼,那么我們下次進(jìn)入該網(wǎng)頁(yè)時(shí)就會(huì)有你上次的登陸信息,下面這篇文章主要給大家介紹了關(guān)于vuex存儲(chǔ)數(shù)據(jù)的幾種方法,需要的朋友可以參考下
    2022-10-10
  • 如何在 Vue 表單中處理圖片

    如何在 Vue 表單中處理圖片

    這篇文章主要介紹了如何在 Vue 表單中處理圖片,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01
  • 深入淺析vue中cross-env的使用

    深入淺析vue中cross-env的使用

    cross-env是跨平臺(tái)設(shè)置和使用環(huán)境變量的腳本。這篇文章主要介紹了vue中cross-env的使用,需要的朋友可以參考下
    2019-09-09
  • vue3.x項(xiàng)目中,出現(xiàn)紅色波浪線問(wèn)題及解決

    vue3.x項(xiàng)目中,出現(xiàn)紅色波浪線問(wèn)題及解決

    這篇文章主要介紹了vue3.x項(xiàng)目中,出現(xiàn)紅色波浪線問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue3?Composition?API優(yōu)雅封裝第三方組件實(shí)例

    Vue3?Composition?API優(yōu)雅封裝第三方組件實(shí)例

    這篇文章主要為大家介紹了Vue3?Composition?API優(yōu)雅封裝第三方組件實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評(píng)論

兰溪市| 湖南省| 南溪县| 宿州市| 安福县| 玉林市| 余干县| 江永县| 内乡县| 韶关市| 贡觉县| 凤凰县| 通河县| 余干县| 岳普湖县| 密云县| 牟定县| 兴仁县| 云霄县| 嫩江县| 台中县| 江达县| 南城县| 玉田县| 会昌县| 神木县| 南宁市| 昌吉市| 蓬莱市| 铜川市| 巢湖市| 武山县| 苍山县| 喜德县| 盐池县| 临泉县| 清丰县| 巴青县| 额济纳旗| 诸城市| 宁乡县|