vue项目实战:api管理和封装


/* * @Description: api aixos的二次封装 request.js * @Version: 2.0 * @Autor: lhl * @Date: 2020-07-14 16:12:35 * @LastEditors: lhl * @LastEditTime: 2020-08-20 17:08:27 */ import Vue from 'vue'; import axios from 'axios'; import store from '../store/index' import qs from 'qs'; // axios自带模块 若报错找不到重新安装即可

// 全局的 axios 默认值 // axios.defaults.baseURL = 'https://api.example.com'; // axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';


// 使用自定义配置新建一个 axios 实例
const instance = axios.create({ baseURL: 'api', // process.env.BASE_API, // api的 base_url
  timeout: 100000, // 10s 请求超时时间
  // headers: 'xx'
}) // 请求拦截器(全局) // Authorization-token: xxx-token
instance.interceptors.request.use(config => { console.log(config, '请求拦截器') const token = store.state.user.token; // console.log(token,'token请求拦截器')
  // const token = 'xxx-token';
  token && (config.headers['Authorization-token'] = token); config.withCredentials = true
  if (config.headers['Content-Type'] === 'application/json') { config.data = JSON.stringify(config.data) } if (config.headers['Content-Type'] === 'multipart/form-data') { return config } if (config.method === 'post' || config.method === 'put' || config.method === 'delete') { if (typeof (config.data) !== 'string') { config.data = qs.stringify(config.data) } } return config }, error => { return Promise.reject(error) }) // 响应拦截器(全局)
instance.interceptors.response.use(response => { console.log(response, '响应拦截器') // 把axios的data层去掉原本(res.data.xx) 直接使用数据就可以res.xx即可
  return response.data }, error => { return Promise.reject(error) }) export default instance // 使用axios在调用后台接口超时或是报某个特性的错误码时,需要重新发送请求。此时用到一个第三方的库:axios-retry解决了这个问题

// npm install axios-retry

// import axiosRetry from 'axios-retry';

// //配置axios // axiosRetry(axios, {  // retries: 3, //设置自动发送请求次数 // retryCondition: (error)=>{ // //true为打开自动发送请求,false为关闭自动发送请求 // //这里的意思是当请求方式为get时打开自动发送请求功能 // return (error.config.method === 'get'); // } // });
/* * @Description: 所有api的入口文件 index.js 将来 main.js 引入挂载 vue原型上面 方便统一管理无需各种 import * @Version: 2.0 * @Autor: lhl * @Date: 2020-07-20 10:18:58 * @LastEditors: lhl * @LastEditTime: 2020-08-20 17:12:26 */ 

// import * as xxx from 'xxx'; 会将若干export导出的内容组合成一个对象返回; // import xxx from 'xxx';(export default xxx)只会导出这个默认的对象作为一个对象
 import * as user from './user' import * as infoList from './infoList' export default { user, infoList } // 假设调用则在组件里面 模块下面的对应的接口方法即可完成调用 // this.$http.user.xx() // this.$http.infoList.xx()
/* * @Description: 测试列表接口 infoList.js * @Version: 2.0 * @Autor: lhl * @Date: 2020-08-03 15:58:10 * @LastEditors: lhl * @LastEditTime: 2020-08-20 17:08:36 */ import instance from './request' import store from '../store/index'

// 角色管理列表
export function roleList (data) { return instance({ url: '/systemdata/role/pageList', method: 'post', headers: { 'Content-Type': 'application/json' }, data }) }
/* * @Description: 用户信息接口 user.js * @Version: 2.0 * @Autor: lhl * @Date: 2020-08-03 15:35:51 * @LastEditors: lhl * @LastEditTime: 2020-08-20 17:11:13 */ import instance from './request' import store from '../store/index'

// responseType: 'blob', 如果返回的格式是流文件需要加上相应类型

// get请求  // export function getLoawList(params) { // return request({ // url: '/system/lowlist', // method: 'get', // params: params // }) // }

// 获取用户信息
export function userInfo(data) { return instance({ url: '/user/userInfo/getByLoginUser', method: 'post', headers: { 'Content-Type': 'application/json' }, data }) } // 获取页面按钮权限
export function btnList (data) { return instance({ url: '/system/menu/getCurrUserButton', method: 'post', headers: { 'Content-Type': 'application/json' }, data }) }

  以上代码本人项目实测!!!真实可靠,请勿随意转载~转载请注明出处~~~谢谢合作!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM