axios.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import axios from 'axios'
  2. import qs from 'qs'
  3. // 在config.js文件中统一存放一些公共常量,方便之后维护
  4. import { baseURL } from './config.js'
  5. // 添加请求拦截器,在发送请求之前做些什么(**具体查看axios文档**)--------------------------------------------
  6. axios.interceptors.request.use(function (config) {
  7. // 显示loading
  8. return config
  9. }, function (error) {
  10. // 请求错误时弹框提示,或做些其他事
  11. return Promise.reject(error)
  12. })
  13. // 添加响应拦截器(**具体查看axios文档**)----------------------------------------------------------------
  14. axios.interceptors.response.use(function (response) {
  15. // 对响应数据做点什么,允许在数据返回客户端前,修改响应的数据
  16. // 如果只需要返回体中数据,则如下,如果需要全部,则 return response 即可
  17. return response.data
  18. }, function (error) {
  19. // 对响应错误做点什么
  20. return Promise.reject(error)
  21. })
  22. // 封装数据返回失败提示函数---------------------------------------------------------------------------
  23. function errorState (response) {
  24. // 隐藏loading
  25. // 如果http状态码正常,则直接返回数据
  26. if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {
  27. // 如果不需要除了data之外的数据,可以直接 return response.data
  28. return response
  29. } else {
  30. alert('数据获取错误')
  31. }
  32. }
  33. // 封装数据返回成功提示函数---------------------------------------------------------------------------
  34. function successState (res) {
  35. // 隐藏loading
  36. // 统一判断后端返回的错误码(错误码与后台协商而定)
  37. if (res.data.code === '000000') {
  38. alert('success')
  39. return res
  40. }
  41. }
  42. // 封装axios--------------------------------------------------------------------------------------
  43. function apiAxios (method, url, params) {
  44. let httpDefault = {
  45. method: method,
  46. baseURL: baseURL,
  47. url: url,
  48. // `params` 是即将与请求一起发送的 URL 参数
  49. // `data` 是作为请求主体被发送的数据
  50. params: method === 'GET' || method === 'DELETE' ? params : null,
  51. data: method === 'POST' || method === 'PUT' ? qs.stringify(params) : null,
  52. timeout: 10000
  53. }
  54. // 注意**Promise**使用(Promise首字母大写)
  55. return new Promise((resolve, reject) => {
  56. axios(httpDefault)
  57. // 此处的.then属于axios
  58. .then((res) => {
  59. successState(res)
  60. resolve(res)
  61. }).catch((response) => {
  62. errorState(response)
  63. reject(response)
  64. })
  65. })
  66. }
  67. // 输出函数getAxios、postAxios、putAxios、delectAxios,供其他文件调用-----------------------------
  68. // Vue.js的插件应当有一个公开方法 install。这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象。
  69. export default {
  70. install: function (Vue) {
  71. Vue.prototype.getAxios = (url, params) => apiAxios('GET', url, params)
  72. Vue.prototype.postAxios = (url, params) => apiAxios('POST', url, params)
  73. Vue.prototype.putAxios = (url, params) => apiAxios('PUT', url, params)
  74. Vue.prototype.delectAxios = (url, params) => apiAxios('DELECT', url, params)
  75. }
  76. }