vue封裝axios基本思路


https://segmentfault.com/a/1190000016003454

Axios 是一個基於 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中。在vue項目之中使用axios是一個非常明智的選擇,因為vue官方已經宣稱不再維護vue-resource,並且推薦使用axios.

1 為什么選擇axios?

  1. 使用axios可以統一做請求-響應攔截,例如響應時我們將響應信息攔截起來,判斷狀態碼,從而彈出報錯信息
  2. 設定請求超時,例如3000ms未響應則停止請求
  3. 基於promise,可以很方便地使用then或者catch來處理請求
  4. 自動轉換json數據

2 如何使用?

可以使用以下方式

1. npm install axios --save 2. bower install axios --save 3. <script src="https://unpkg.com/axios/dist/axios.min.js"></script> 

3 封裝http請求


官網給定的實例:

axios.get('/user?ID=12345') .then(function(response){ console.log(response); }) .catch(function(err){ console.log(err); });

在此基礎上我們應該再次封裝http中的post get put delete方法,在具體頁面只需要調用接口函數以及傳入params即可,其余例如url,header之類的我們應該進行封裝。
例如在index.vue之中使用一個函數來實現通過id來獲取對應的用戶信息,返回結果在then方法的result之中

API.getUserInfo({id:'01'}).then((result)=>{})

4 實現思路


新建一個文件,構建一個axios對象實例 例如axios.js

import axios from 'axios'; import router from '../router'; // 創建axios實例 const service = axios.create({ timeout: 30000 // 請求超時時間 }) // 添加request攔截器 service.interceptors.request.use(config => { return config }, error => { Promise.reject(error) }) // 添加respone攔截器 service.interceptors.response.use( response => { let res={}; res.status=response.status res.data=response.data; return res; }, error => { if(error.response && error.response.status == 404){ router.push('/blank.vue') } return Promise.reject(error.response) } ) export function get(url, params = {}) { params.t = new Date().getTime(); //get方法加一個時間參數,解決ie下可能緩存問題. return service({ url: url, method: 'get', headers: { }, params }) } //封裝post請求 export function post(url, data = {}) { //默認配置 let sendObject={ url: url, method: 'post', headers: { 'Content-Type':'application/json;charset=UTF-8' }, data:data }; sendObject.data=JSON.stringify(data); return service(sendObject) } //封裝put方法 (resfulAPI常用) export function put(url,data = {}){ return service({ url: url, method: 'put', headers: { 'Content-Type':'application/json;charset=UTF-8' }, data:JSON.stringify(data) }) } //刪除方法(resfulAPI常用) export function deletes(url){ return service({ url: url, method: 'delete', headers: {} }) } //不要忘記export export { service }

上述代碼主要實現一個基本的axios封裝,請求成功時獲取響應對象,我們主需要獲取幾個有用的信息即可,例如狀態碼,數據即可,同時處理錯誤,例如返回404我們跳轉到一個新界面

封裝接口函數
新建文件,例如api.js

import {get, post,deletes,put} from './axios.js' ;//導入axios實例文件中方法 let bsae_api = process.env.BASE_API ? './'+process.env.BASE_API :'..' //獲取項目api請求地址 //根據id獲取用戶信息 export const getUserInfoById=(id)=>{ return get(`${bsae_api}/web/user/${id}`); //resfulapi風格 }

具體頁面使用 index.vue

import API from '@/utils/api'
getUserInfo(){ API.getUserInfoById('01).then((result)=>{ }).catch((error)=>{ }) }

以上就是一些axios封裝的基本介紹


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM