// axios.js 放入如下 import Vue from 'vue'; import router from '../router/index.js' const myVue = new Vue(); const base_url = 'http://dushu.test01.qcw100.com/rest/2.0'; //const base_url = 'https://api.tuijiemingpian.net/rest/2.0'; import axios from 'axios'; axios.defaults.timeout = 10000; // 请求延迟时间 const timeOut = 100; // 请求加载条显示 // console.log('当前环境', process.env.NODE_ENV); // 线上请求地址 // process.env.NODE_ENV === 'development' ? axios.defaults.baseURL = '/api' : axios.defaults.baseURL = base_url; process.env.NODE_ENV === 'development' ? axios.defaults.baseURL = '/api' : axios.defaults.baseURL = base_url; //http request 拦截器 axios.interceptors.request.use( config => { let access_token = localStorage.getItem('access_token'); // 注意使用的时候需要引入cookie方法,推荐js-cookie if (config.method == 'post' || config.method == 'upload') { // 如果是post请求 请求体自动加上token config.data = config.data; if (access_token) { config.data.access_token = access_token; } else { console.error('token失效'); } config.headers = { 'Content-Type': 'application/x-www-form-urlencoded', } } else if (config.method == 'get') { // 如果是get请求 url中拼接上 config.params.access_token = access_token; config.headers = { 'Content-Type': 'application/x-www-form-urlencoded', } } return config; }, error => { return Promise.reject(err); } ); //http response 拦截器 axios.interceptors.response.use( // token 可以判断已过期,重定向到登录页面 response => { if(response.data.error_msg == '密码过期,请重新登录' && response.data.error_code == 113602){ localStorage.removeItem('access_token') router.push({ path:"/notLoggedIn", query:{} // 从哪个页面跳转 }) } // if (response.data.errCode == 2) { // // router.push({ // // path:"/login", // // querry:{redirect:router.currentRoute.fullPath} // 从哪个页面跳转 // // }) // } return response; }, error => { return Promise.reject(error) } ) /** * 封装get方法 * @param url * @param data * @returns {Promise} */ export function get(url, params = {}) { return new Promise((resolve, reject) => { if(!(url.indexOf('hotLists') > -1 || url.indexOf('nearby') > -1)) { myVue.$toast.loading({ duration: 5000, // 持续展示 toast mask: true, message: "加载中..." }); } axios({ url: url, method: 'GET', params: params, transformRequest: [function (data) { let ret = '' for (let it in data) { ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&' } return ret }], }) .then(res => { if (res.data.code == 1001) { // this.$toast('登录超时,' + res.data.message); // this.$router.push({ path: '/' }); return } resolve(res.data); myVue.$toast.clear(); }) .catch(err => { reject(err) myVue.$toast.clear(); }) }) } /** * 封装post请求 * @param url * @param data * @returns {Promise} */ export function post(url, data = {}) { return new Promise((resolve, reject) => { if(!(url.indexOf('hotLists') > -1 || url.indexOf('nearby') > -1)) { myVue.$toast.loading({ duration: 5000, // 持续展示 toast mask: true, message: "加载中..." }); } axios({ url: url, method: 'POST', data: data, transformRequest: [function (data) { let ret = '' for (let it in data) { ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&' } return ret }], }) .then(res => { myVue.$toast.clear(); if (res.data.code == 1001) { // this.$toast('登录超时,' + res.data.message); // this.$router.push({ path: '/' }) return } resolve(res.data); }) .catch(err => { myVue.$toast.clear(); reject(err) }) }) } /** * 封装upload上传请求 * @param url * @param data * @returns {Promise} */ export function upload(url, data = {}) { return new Promise((resolve, reject) => { myVue.$toast.loading({ duration: 0, // 持续展示 toast mask: true, message: "加载中..." }); console.log(data,'图片格式') axios({ url: url, method: 'POST', data: data }) .then(res => { myVue.$toast.clear(); if (res.data.code == 1001) { return } resolve(res.data); }) .catch(err => { myVue.$toast.clear(); reject(err) }) }) } /** * 语音对话使用上传 * @param url * @param data * @returns {Promise} */ export function postRecording(url, data = {}) { return new Promise((resolve, reject) => { axios({ url: url, method: 'POST', data: data, }) .then(res => { if (res.data.code == 1001) { // this.$toast('用户超时' + res.data.message); // this.$router.push({ path: '/' }) return } resolve(res.data); }) .catch(err => { reject(err) }) }) } /** * from 表单 */ export function get_from(URL, PARAMS) { var p = new Promise((resolve, reject) => { //做一些异步操作 var temp = document.createElement("form"); temp.action = URL; temp.method = "get"; temp.style.display = "none"; for (var x in PARAMS) { var opt = document.createElement("textarea"); opt.name = x; opt.value = PARAMS[x]; temp.appendChild(opt); } document.body.appendChild(temp); temp.submit(); resolve(temp) }); return p; } /** * 上传 excel */ export function up_excel(URL, PARAMS) { return new Promise((resolve, reject) => { let token = localStorage.getItem('token'); let config = { headers: { 'Content-Type': 'multipart/form-data' } } PARAMS.append('token', token) axios.post(URL, PARAMS, config) .then(res => { resolve(res.data) }) .catch(err => { reject(err) }) }) }
vue使用: //post请求 let params = {} this.$post("/user/integral/pay", params).then(res => { if (!res.error_code) { console.log(res.response_data,'res') } else { this.$toast(res.error_msg); console.log(res.error_msg,'error') } }) //get请求 let params = {} this.$get("/user/integral/pay", params).then(res => { if (!res.error_code) { console.log(res.response_data,'res') } else { this.$toast(res.error_msg); console.log(res.error_msg,'error') } }) //图片上传 //将formDate文件上传到阿里云服务器,会返回图片地址 this.$upload('/file/file/upload', formData).then(res => { if (!res.error_code) { console.log(res.response_data,'res'); let str = res.response_data[0]; this.setUserInfo() } else { this.$toast(res.error_msg); console.log(res.error_msg, 'error') } });