Vue中axios的封裝和api接口的統一管理


更新的是我csdn上的文章,需要的話可以看下,互相學習點擊去我的csdn

vue中axios的封裝

在vue項目和后端交互獲取數據時,通常使用axios庫,官方文檔:https://www.npmjs.com/package/axios。
淺談在項目中axios的簡單二次封裝

安裝

npm install axios; //安裝axios
//cnpm install axios;//或者使用鏡像下載.

引入組件

通常情況下,在項目src目錄下創建request文件夾,然后創建http.js和api.js文件。

  • http.js用來二次封裝axios;
  • api.js用來統一管理后端接口;

在http.js文件中

  • 引入axios;
  • 引入qs,用於序列化post類型的數據。
  • 引入ui提示框,根據自己u進行修改;推薦elementui文檔

http.js

環境切換

在http.js的文件中的axios.defaults.baseURL可以設置axios的默認請求地址。配合不同的運行指令進行開發不同環境的數據。
另附配置vue不同環境配置不同打包命令

// 環境的切換
if (process.env.NODE_ENV == 'development') {    
	    axios.defaults.baseURL = 'https://www.baidu.com';} 
else if (process.env.NODE_ENV == 'debug') {    
	   axios.defaults.baseURL = 'https://www.ceshi.com';
} 
else if (process.env.NODE_ENV == 'production') {    
      axios.defaults.baseURL = 'https://www.production.com';
}

請求默認值的設置

通過axios.defaults.timeout設置默認的請求超時時間。

//設置默認的請求超時時間
	axios.defaults.timeout = 10000;

設置默認請求頭和token

//設置post的請求頭
	axios.defaults.headers.post['Content-Type'] = 'application/json';
//設置默認token 一般有權限不在這里設置
	//axios.defaults.headers.Authorization=token;

請求攔截

token攔截
一般情況下,發送請求必須帶有token進行驗證。做權限的話這里需要注意。

axios.interceptors.request.use(
	 config => {
	    let token = localStorage.getItem("header");
	    if (token) {  // 判斷是否存在token,如果存在的話,則每個http header都加上token
	      config.headers.token = `${token}`;
	    }
	    return config;
	  },
	  err => {
	    this.$router.push("/login")
	    return Promise.reject(err);
	  });

響應攔截

這里需要根據后端協商,根據后端返回狀態碼進行處理

axios.interceptors.response.use(function (response) {
	if (response.status >= 400) {
	localStorage.clear();// 刪除已經失效或過期的token(不刪除也可以,因為登錄后覆蓋)
	router.replace({
  		path: '/login', // 到登錄頁重新獲取token
  		query: { 
   		 //回到當前頁面
    	redirect: router.currentRoute.fullPath 
			} 
		})
  	}
  return response

}, function (error) {
  	if (error.response) {
    	if(error.response.status===403){
     		 Message({
        		showClose: true,
        		message: '登錄過期',
        		type: 'error'
    		 });
        localStorage.clear();
        Cookies.set("user","",-10);
        router.replace({
          path: '/login' // 到登錄頁重新獲取token
        })
    }else if(error.response.status===405){
      Message({
        showClose: true,
        message: '權限不足,請聯系管理員',
        type: 'warning'
    	});
    	router.replace({
     		 path: '/error', 
	    })
    }else if(error.response.status===500){
      	Message({
        	showClose: true,
        	message: '服務器異常',
        	type: 'error'
   		 });
   	   }
    }
  return Promise.reject(error)
})

封裝get和post方法

axios封裝的方法有很多,比如get,post,delete,put等方法。這里簡單介紹get和post的封裝。

post

/** 
 * post方法,對應post請求 
 * @param {String} url [請求的url地址] 
 * @param {Object} params [請求時攜帶的參數] 
 */
export function post(url, params) {
    return new Promise((resolve, reject) => {
        axios.post(url, params)
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}

get

/**
 * get方法,對應get請求
 * @param {String} url [請求的url地址]
 * @param {Object} params [請求時攜帶的參數]
 */
export function get(url, params) {
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params: params
        }).then(res => {
            resolve(res.data);
        }).catch(err => {
            reject(err.data)
        })
    });
}

vue中api的封裝

首先在api.js中引入在http.js中封裝的get和post兩種方法。

import { get, post } from './http'

不同參數的封裝接口方法

export const Login = p => get('/api/admin/login', p);
export const Registry = p => post('/api/admin/registry', p);
//路徑參數封裝
//export const  Api= p => post('/api/'+ p);
//多參數封裝
export const  Api=( p,q )=> post('/api/'+ p+“/"+q);

頁面中使用方法

import { Login,Registry } from "@/request/api"
export default {
	name:"app",
	data(){
		return{
			message:{
				uname:"",
				upwd:""
			}
		}
	},
	methods:{
		login(){
			Login(this.message).then(res=>{
				....請求成功的處理
			})
		}
	}
}

例外附上:

  1. gulp安裝與使用
  2. 搭建基於webpack的vue環境
  3. 淺談Vue項目優化心得
  4. 總結:搭建Vue項目心得
  5. 總結:vue中Axios的封裝-API接口的管理


免責聲明!

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



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