一般我們寫小型的項目是用不到封裝axios實例
但是當我們寫大型項目時 接口有時候多到有上百個接口,那我們在請求一次調用一次接口,接口上好多都是重復的,這個時候我們就可以封裝axios實例,既節省了事件。有可以少些好多代碼
首先我們要先安裝axios
npm i axios --save
然后在vue項目中要創建兩個文件夾api文件和http文件 當然文件名是自定義的
在http文件下http.js中要這樣寫
import axios from 'axios'; //環境的切換 環境指的就是開發環境和生產環境 //開發環境(development) 中用到的是測試接口 if (process.env.NODE_ENV == 'development') { axios.defaults.baseURL = 'http://120.53.31.103:84/' }
//通過if判斷處於開發環境還是生產環境 if (process.env.NODE_ENV == 'production') { axios.defaults.baseURL = 'https://www.365msmk.com/' } //設置請求超時的事件 axios.defaults.timeout = 5000; // 請求攔截 axios.interceptors.request.use( config => { //獲取輪播圖要設置的頭信息 config.headers = { DeviceType: 'H5' } //可每次發送請求之間的邏輯處理 ,比如判斷token return config } ) // 響應攔截 axios.interceptors.response.use( response => { //如果返回的·狀態碼為200時,說明接口請求成功 return response }, error => { if (error.response.status) { } } ) //設置get請求方式 用promise方式返回的實例來實現 export function get(url, params) { return new Promise((resolve, reject) => { axios.get(url, { params: params }).then(res => { resolve(res) }).catch(err => { reject(err) }) }) } //設置post請求方式 用promise方式返回的實例來實現 export function post(url, params) { return new Promise((resolve, reject) => { axios.post(url, params).then(res => { resolve(res.data) }).catch(err => { reject(err.data) }) }) }
在api文件下api.js中要這樣
首先要引入我們上個http.js文件中的兩種請求方式post,get
import { post, get } from '../http/http.js' //首頁講師和精選課堂 資訊數據的請求
//Indexlist是我們定義的函數名 用於·在后面調用方法 export function Indexlist() {
// return get('這里面寫的是請求接口后面需要拼接的一部分') return get('api/app/recommend/appIndex') } //輪播圖數據的請求 export function Indexbanner() { return get('api/app/banner') }
在vue組件中要這樣應用
1 import {Indexlist} from "../api/api.js"; 2 //首先要引用api文件中當時定義的方法名 這樣也用到了解構賦值 ,提取api.js文件中我們要用的數據 3 4 async mounted() { 5 //這里也可以用到async await語法 6 var ids = this.$route.query.item; 7 //接收上個頁面傳過來的id名 8 var objlist = await Indexlist({ id: ids }); 9 10 console.log(objlist) 11 //打印我們請求那個接口,看下有數據沒 12 13 this.CommentList = [...objlist.data.list]; 14 //定義一個數組用擴展運算符進行賦值 console.log(this.CommentList); 15 } 16