vue 封装请求

亦凉 2023-02-12 15:26 136阅读 0赞

创建文件夹

在这里插入图片描述

http.js

  1. import axios from 'axios';
  2. // 设置请求超时时间和域名 创建axios实例
  3. const instance = axios.create({
  4. baseURL: '127.0.0.1',
  5. timeout: 5000
  6. })
  7. // http request 拦截器
  8. instance.interceptors.request.use(
  9. config => {
  10. // console.log(config)
  11. // config.data = JSON.stringify(config.data)
  12. config.headers = {
  13. // 'Content-Type': 'application/x-www-form-urlencoded'
  14. 'Content-Type': 'application/json'
  15. }
  16. return config
  17. }, err => {
  18. return Promise.reject(err)
  19. }
  20. )
  21. // 响应拦截器即异常处理
  22. instance.interceptors.response.use(response => {
  23. return response
  24. }, err => {
  25. if (err && err.response) {
  26. switch (err.response.status) {
  27. case 400:
  28. console.log('错误请求')
  29. break
  30. case 401:
  31. console.log('未授权,请重新登录')
  32. break
  33. case 403:
  34. console.log('拒绝访问')
  35. break
  36. case 404:
  37. console.log('请求错误,未找到该资源')
  38. break
  39. case 405:
  40. console.log('请求方法未允许')
  41. break
  42. case 408:
  43. console.log('请求超时')
  44. break
  45. case 500:
  46. console.log('服务器端出错')
  47. break
  48. case 501:
  49. console.log('网络未实现')
  50. break
  51. case 502:
  52. console.log('网络错误')
  53. break
  54. case 503:
  55. console.log('服务不可用')
  56. break
  57. case 504:
  58. console.log('网络超时')
  59. break
  60. case 505:
  61. console.log('http版本不支持该请求')
  62. break
  63. default:
  64. console.log(`连接错误${ err.response.status}`)
  65. }
  66. } else {
  67. console.log('连接到服务器失败')
  68. }
  69. return Promise.resolve(err.response)
  70. })
  71. /**
  72. * 封装get方法
  73. * @param url
  74. * @param data
  75. * @returns { Promise}
  76. */
  77. function get(url, params = { }) {
  78. return new Promise((resolve, reject) => {
  79. instance.get(url, {
  80. params: params
  81. })
  82. .then(response => {
  83. resolve(response.data)
  84. })
  85. .catch(err => {
  86. reject(err)
  87. })
  88. })
  89. }
  90. /**
  91. * 封装post请求
  92. * @param url
  93. * @param data
  94. * @returns { Promise}
  95. */
  96. function post(url, data = { }) {
  97. return new Promise((resolve, reject) => {
  98. instance.post(url, data)
  99. .then(response => {
  100. resolve(response.data)
  101. }, err => {
  102. reject(err)
  103. })
  104. })
  105. }
  106. /**
  107. * 封装patch请求
  108. * @param url
  109. * @param data
  110. * @returns { Promise}
  111. */
  112. function patch(url, data = { }) {
  113. return new Promise((resolve, reject) => {
  114. instance.patch(url, data)
  115. .then(response => {
  116. resolve(response.data)
  117. }, err => {
  118. reject(err)
  119. })
  120. })
  121. }
  122. /**
  123. * 封装put请求
  124. * @param url
  125. * @param data
  126. * @returns { Promise}
  127. */
  128. function put(url, data = { }) {
  129. return new Promise((resolve, reject) => {
  130. instance.put(url, data)
  131. .then(response => {
  132. resolve(response.data)
  133. }, err => {
  134. reject(err)
  135. })
  136. })
  137. }
  138. /**
  139. * 封装delete请求
  140. * @param url
  141. * @param data
  142. * @returns { Promise}
  143. */
  144. function del(url,params){
  145. return new Promise((resolve,reject)=>{
  146. instance.delete(url,params).then(response=>{ //这里传递的参数不做处理
  147. resolve(response.data);
  148. },err=>{
  149. reject(err);
  150. }).catch((error)=>{
  151. reject(error);
  152. })
  153. })
  154. }
  155. // 开放接口
  156. export default {
  157. get: get,
  158. post: post,
  159. put: put,
  160. patch: patch,
  161. del:del
  162. }

api.js

  1. import login from './page/login'
  2. import companies from './page/companies'
  3. export const api = {
  4. //登录模块
  5. login,
  6. //企业列表
  7. companies,
  8. }

在创建一个文件夹 把api分模块管理

在这里插入图片描述

  1. import http from '../http'
  2. export default {
  3. //登录请求
  4. login(data) {
  5. return http.post('/api-admin/login', data)
  6. },
  7. }

main.js

  1. import { api} from './axios/api'
  2. Vue.prototype.$api = api;

.vue

在这里插入图片描述

delete特别注意
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,136人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue-封装axios请求

    最近接手新的vue项目,发现axios竟然没有封装,立马动手封装,这里记录一下完整的封装过程,废话不说,直接上代码 baseConfig.js文件 //存放各个服