欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

動態(tài)Axios的配置步驟詳解

 更新時間:2018年01月12日 11:32:59   作者:luozz  
這篇文章主要給大家分享介紹了關(guān)于動態(tài)Axios的配置步驟,文中通過示例代碼介紹的非常詳細(xì),通過這個教程大家可以很方便的實現(xiàn)動態(tài)Axios的配置,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

以前寫Vue項目的時候都是使用vue-resource做為項目ajax庫,在11月份的某一天尤大微博的更新表示ajax的庫應(yīng)該是通用的,放棄了對vue-resource的技術(shù)支持,推薦使用axios。

推薦使用Vue-cli工具來創(chuàng)建和管理項目,就算剛開始不熟悉,用著用著便可知曉其中的奧妙。前一段時間官方所推薦的數(shù)據(jù)請求插件還是Vue-resource,但現(xiàn)在已經(jīng)變了,變成了Axios,不用知道為什么變了,反正這個用起來比那個好一些,用就是了,下面是一些封裝axios請求的一些經(jīng)驗,不對之處,還望多多指教!

方法如下

一、創(chuàng)建文件,Vue項目初始化之后,在src目錄下再創(chuàng)建一個util工具文件夾,一般就是用來存放一些封裝的函數(shù)方法,現(xiàn)在讓我們在util文件目錄下創(chuàng)建一個http.js文件,封裝axios方法。

二、直接上代碼(常規(guī)版),代碼中有詳細(xì)的注釋

import axios from 'axios' //引用axios
import {Promise} from 'es6-promise' //引入Promise
// axios 配置
axios.defaults.timeout = 5000; //設(shè)置超時時間
axios.defaults.baseURL = 'http://localhost:4000/api/v1/'; //這是調(diào)用數(shù)據(jù)接口
// http request 攔截器(所有發(fā)送的請求都要從這兒過一次),通過這個,我們就可以把token傳到后臺,我這里是使用sessionStorage來存儲token等權(quán)限信息和用戶信息,若要使用cookie可以自己封裝一個函數(shù)并import便可使用
axios.interceptors.request.use(
 config => {
  const token = sessionStorage.getItem("token"); //獲取存儲在本地的token
  config.data = JSON.stringify(config.data);
  config.headers = {
   'Content-Type':'application/json' //設(shè)置跨域頭部,雖然很多瀏覽器默認(rèn)都是使用json傳數(shù)據(jù),但咱要考慮IE瀏覽器。
  };
  if (token) {
   config.headers.Authorization = "Token " + token; //攜帶權(quán)限參數(shù)
  }
  return config;
 },
 err => {
  return Promise.reject(err);
 }
);


// http response 攔截器(所有接收到的請求都要從這兒過一次)
axios.interceptors.response.use(
 response => {
//response.status===401是我和后臺約定的權(quán)限丟失或者權(quán)限不夠返回的狀態(tài)碼,這個可以自己和后臺約定,約定返回某個自定義字段也是可以的
  if(response.status == 401) {
   router.push({ //push后面是一個參數(shù)對象,可以攜帶很多參數(shù),具體可以去vue-router上查看,例如query字段表示攜帶的參數(shù)
    path: '/login' 
   })
  }
  return response;
 },
 error => {
  return Promise.reject(error.response.data)
 });

export default axios;

/**
 * fetch 請求方法
 * @param url
 * @param params
 * @returns {Promise}
 */
export function fetch(url, params = {}) {
 return new Promise((resolve, reject) => {
  axios.get(url, {
   params: params
  })
  .then(response => {
   resolve(response.data);
  })
  .catch(err => {
   reject(err)
  })
 })
}

/**
 * post 請求方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function post(url, data = {}) {
 return new Promise((resolve, reject) => {
  axios.post(url, data)
   .then(response => {
    resolve(response.data);
   }, err => {
    reject(err);
   })
 })
}

/**
 * patch 方法封裝
 * @param url
 * @param data
 * @returns {Promise}
 */
export function patch(url, data = {}) {
 return new Promise((resolve, reject) => {
  axios.patch(url, data)
   .then(response => {
    resolve(response.data);
   }, err => {
    reject(err);
   })
 })
}

/**
 * put 方法封裝
 * @param url
 * @param data
 * @returns {Promise}
 */
export function put(url, data = {}) {
 return new Promise((resolve, reject) => {
  axios.put(url, data)
   .then(response => {
    resolve(response.data);
   }, err => {
    reject(err);
   })
 })
}

三、(動態(tài)版),axios的攔截器不是必要的,不是每個項目都需要,而且headers里面的Content-Type和Authorization不止一種,這時就需要使用另一種方法。

util/http.js

import axios from 'axios' //引用axios
import {Promise} from 'es6-promise' //引入Promise
// axios 配置和攔截器都不用了,這里我使用了一個動態(tài)配置數(shù)據(jù)請求地址,在App.vue中,代碼在下面,這個也不是必須的。
//^_^下面都設(shè)置一個默認(rèn)的頭部,使用的時候可以傳入數(shù)據(jù)覆蓋^_^,例如使用fetch(GET)方法時,沒有請求數(shù)據(jù),但是請求頭有變化,則應(yīng)寫成 fetch("地址", {}, {"這里寫頭部的內(nèi)容"}) 記住沒數(shù)據(jù)用一個空對象占位置
/**
 * fetch 請求方法
 * @param url
 * @param params
 * @returns {Promise}
 */
export function fetch(url, params = {}, headers = {
 'Content-Type': 'application/json', //設(shè)置跨域頭部
 "Authorization": 'JWT ' + sessionStorage.getItem("authToken")
}) {

 return new Promise((resolve, reject) => {
  axios.get(url, {
   params: params,
   headers: headers
  })
  .then(response => {
   resolve(response.data);
  })
  .catch(err => {
   reject(err.response)
  })
 })
}

/**
 * post 請求方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function post(url, data = {}, config = {
 "headers": {
  'Content-Type': 'application/json', //設(shè)置跨域頭部
  "Authorization": 'JWT ' + sessionStorage.getItem("authToken")
 }
}) {
 return new Promise((resolve, reject) => {
  axios.post(url, data, config)
   .then(response => {
    resolve(response.data);
   }, err => {
    reject(err.response);
   })
 })
}

/**
 * patch 方法封裝
 * @param url
 * @param data
 * @returns {Promise}
 */
export function patch(url, data = {}, config = {
 "headers": {
  'Content-Type': 'application/json', //設(shè)置跨域頭部
  "Authorization": 'JWT ' + sessionStorage.getItem("authToken")
 }
}) {
 return new Promise((resolve, reject) => {
  axios.patch(url, data, config)
   .then(response => {
    resolve(response.data);
   }, err => {
    reject(err.response);
   })
 })
}

/**
 * put 方法封裝
 * @param url
 * @param data
 * @returns {Promise}
 */
export function put(url, data = {}, config = {
 "headers": {
  'Content-Type': 'application/json', //設(shè)置跨域頭部
  "Authorization": 'JWT ' + sessionStorage.getItem("authToken")
 }
}) {
 return new Promise((resolve, reject) => {
  axios.put(url, data, config)
   .then(response => {
    resolve(response.data);
   }, err => {
    reject(err.response);
   })
 })
}

App.vue(這是在src目錄下的程序入口文件)

<template>
 <div id="app">
 <router-view/>
 </div>
</template>

<script>
import axios from 'axios';
let protocol = window.location.protocol; //協(xié)議
let host = window.location.host; //主機(jī)
let reg = /^localhost+/;
if(reg.test(host)) {
 //若本地項目調(diào)試使用
 axios.defaults.baseURL = 'http://10.0.xx.xxx:xxxx/api/';
} else {
 //動態(tài)請求地址
 axios.defaults.baseURL = protocol + "http://" + host + "/api/";
}
axios.defaults.timeout = 30000;
export default {
 name: 'app',
 axios //這里記得導(dǎo)出,若請求地址永久固定一個,則就按照`普通版`配置一個baserURL就可以了
}
</script>

<style lang="scss"> //這里我使用的是scss
@import '~@/style/style'
</style>

總結(jié)

常見問題

在使用動態(tài)版時,為什么稱為動態(tài)呢,是因為訪問地址和請求地址是同一個地址可端口號,例如我通過http://www.cmgos.com(默認(rèn)端口80)訪問項目,那么我的baseURL會自動的變?yōu)閔ttp:www.cmgos.com:80/api/,這么做的原因是當(dāng)某一天項目遷移或者h(yuǎn)ttp改為https時,不用你再去更改請求地址,程序自動就完成了
數(shù)據(jù)請求地址配置不正確?如果你配置了baseURL,那么你封裝的函數(shù)在使用時僅需傳入基于baseURL的請求地址,例如傳入login/那么請求地址會自動變?yōu)閔ttp:www.cmgos.com:80/api/login/,若未配置,那么可以直接傳入整個請求地址

注意事項

在使用動態(tài)版時,由于沒有使用攔截器,所以下面封裝的函數(shù)在返回錯誤的時候需要寫成err.response.data來獲取返回的數(shù)據(jù),但我寫的是err.response,因為這樣可以拿到(status)狀態(tài)碼等信息,若不需要判斷返回的狀態(tài)碼,則改為err.response.data便可

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • vue實現(xiàn)登錄類型切換

    vue實現(xiàn)登錄類型切換

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)登錄類型切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 詳解Vue中如何避免濫用watch

    詳解Vue中如何避免濫用watch

    這篇文章主要為大家詳細(xì)介紹了Vue中濫用watch帶來的問題以及如何解決,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 深入淺析Vue組件開發(fā)

    深入淺析Vue組件開發(fā)

    本文是主要介紹基于Vue的一個組件開發(fā)。本文給大家介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友參考下吧
    2016-11-11
  • Vue?Router修改query參數(shù)url參數(shù)沒有變化問題及解決

    Vue?Router修改query參數(shù)url參數(shù)沒有變化問題及解決

    這篇文章主要介紹了Vue?Router修改query參數(shù)url參數(shù)沒有變化問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 利用vue.js插入dom節(jié)點的方法

    利用vue.js插入dom節(jié)點的方法

    這篇文章主要介紹了利用vue.js插入dom節(jié)點的相關(guān)資料,文中介紹的非常,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Vue3中watch的用法與最佳實踐指南

    Vue3中watch的用法與最佳實踐指南

    這篇文章主要給大家介紹了關(guān)于Vue3中watch用法與最佳實踐的相關(guān)資料,watch的作用可以監(jiān)控一個值的變換,并調(diào)用因為變化需要執(zhí)行的方法,可以通過watch動態(tài)改變關(guān)聯(lián)的狀態(tài),需要的朋友可以參考下
    2021-07-07
  • Vue之生命周期函數(shù)詳解

    Vue之生命周期函數(shù)詳解

    這篇文章主要為大家介紹了Vue之生命周期函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • 教你用Cordova打包Vue項目的方法

    教你用Cordova打包Vue項目的方法

    這篇文章主要介紹了教你用Cordova打包Vue項目的方法,詳細(xì)的介紹了如何Vue項目打包成app,具有一定的參考價值,有興趣的可以了解一下
    2017-10-10
  • Vue 實例事件簡單示例

    Vue 實例事件簡單示例

    這篇文章主要介紹了Vue 實例事件,結(jié)合簡單示例形勢分析了vue.js事件響應(yīng)與頁面元素相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • vue跳轉(zhuǎn)同一個組件,參數(shù)不同,頁面接收值只接收一次的解決方法

    vue跳轉(zhuǎn)同一個組件,參數(shù)不同,頁面接收值只接收一次的解決方法

    今天小編就為大家分享一篇vue跳轉(zhuǎn)同一個組件,參數(shù)不同,頁面接收值只接收一次的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11

最新評論