前提條件:vue-cli 項目
安裝:
npm
npm
在main.js導入:
// 引入axios,并加到原型鏈中
import axios from 'axios';
Vue.prototype.$axios = axios;
import QS from 'qs'
Vue.prototype.qs = QS;
封裝好的axios,拿走不送:(最好是在main.js同級目錄創建一個 https.js 文件,復制粘貼下面代碼,改 接口地址 就可以用)
import axios from 'axios'
import qs from 'qs'axios.defaults.timeout = 5000; //響應時間
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; //配置請求頭
axios.defaults.baseURL = ''; //配置接口地址//POST傳參序列化(添加請求攔截器)
axios.interceptors.request.use((config) => {//在發送請求之前做某件事if(config.method === 'post'){config.data = qs.stringify(config.data);}return config;
},(error) =>{console.log('錯誤的傳參')return Promise.reject(error);
});//返回狀態判斷(添加響應攔截器)
axios.interceptors.response.use((res) =>{//對響應數據做些事if(!res.data.success){return Promise.resolve(res);}return res;
}, (error) => {console.log('網絡異常')return Promise.reject(error);
});//返回一個Promise(發送post請求)
export function fetchPost(url, params) {return new Promise((resolve, reject) => {axios.post(url, params).then(response => {resolve(response);}, err => {reject(err);}).catch((error) => {reject(error)})})
}
返回一個Promise(發送get請求)
export function fetchGet(url, param) {return new Promise((resolve, reject) => {axios.get(url, {params: param}).then(response => {resolve(response)}, err => {reject(err)}).catch((error) => {reject(error)})})
}
export default {fetchPost,fetchGet,
}
開發環境一般要跨域,解決跨域問題(設置代理):vue-cli 3.0的在 package.json 同級目錄新建一個 vue.config.js 文件,加入下面代碼,其他版本找到配置文件的devServer加入代碼:
module.exports = {//axios域代理,解決axios跨域問題baseUrl: '/',devServer: {proxy: {'': {target: 'http://192.168.0.108:8090',changeOrigin: true,ws: true,pathRewrite: {}}}}
}
修改完后記得重啟項目應用配置
然后就到收獲的時候了,在要請求的vue模塊中導入并使用:
import https from '../https.js' // 注意用自己的路徑// 請求后臺數據==================loginPost: function () {let params ={'username': 'admin', 'password': 'admin123', 'rememberMe': 'true','isMobile':'1'}https.fetchPost('/login',params ).then((data) => {this.base.token = data.data.token // console.log("this.base.tokenthis.base.token",this.base.token)this.indexPost2(this.rres)}).catch(err=>{console.log(err)})},indexPost2:function (date) {var this_ = thisthis_.check = falsevar jobj ={data:{'menuDate': date,'token':this.base.token}}let string = JSON.stringify(jobj)let params = {dailyInfo:string}https.fetchPost('/meals/mobile/getDailyMenuByDate', params).then((data) => {this_.base.indexData = datathis_.check = true// console.log('thenthenthenthen',data)}).catch((err)=>{console.log(err)})},// ================================================},
文字不是很多,但重要的都在這,看代碼的注釋就行了