当前位置:   article > 正文

VUE3封装axios网络请求_vue3 http-request

vue3 http-request

在vue项目中,与API接口交互时,通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中。他有很多优秀的特性,例如拦截请求和响应、取消请求、转换json、客户端防御cSRF等功能
当项目中API接口过多时,方便开发以及接口变更时修改请求地址,推荐将接口进行封装,整齐的api就像电路板一样,即使再复杂也能很清晰整个线路。

request.js 

  1. import axios from 'axios'
  2. import router from "@/router";
  3. export function request(config) {
  4. // 创建axios的实例
  5. const instance = axios.create({
  6. baseURL: 'https://api.shop.eduwork.cn',
  7. timeout: 10000
  8. })
  9. // 请求拦截器配置
  10. instance.interceptors.request.use(config => {
  11. // config.headers.Authorization = window.sessionStorage.getItem('token')
  12. return config
  13. }, error => {
  14. console.log(error)
  15. return Promise.error(error)
  16. }
  17. )
  18. // 响应拦截器配置
  19. instance.interceptors.response.use(response => {
  20. console.log(response)
  21. return response.data
  22. }, error => {
  23. switch (error.response.status) {
  24. case 401:
  25. console.log("无权访问")
  26. router.push({path: '/login'})
  27. break
  28. case 403:
  29. console.log("token过期啦")
  30. router.push({path: '/login'})
  31. break
  32. case 404:
  33. console.log("404啦")
  34. router.push({path: '/404'})
  35. break
  36. default:
  37. return Promise.reject(error)
  38. }
  39. return Promise.reject(error)
  40. })
  41. // 发送真正的网络请求
  42. return instance(config);
  43. }
  44. export default request

 http.js配置

  1. import {request} from './request'
  2. const http = {
  3. get(url, params) {
  4. const config = {
  5. method: 'get',
  6. url: url
  7. }
  8. if (params) config.params = params
  9. return request(config)
  10. },
  11. post(url, params) {
  12. const config = {
  13. method: 'post',
  14. url: url
  15. }
  16. if (params) config.data = params
  17. return request(config)
  18. },
  19. put(url, params) {
  20. const config = {
  21. method: 'put',
  22. url: url
  23. }
  24. if (params) config.params = params
  25. return request(config)
  26. },
  27. delete(url, params) {
  28. const config = {
  29. method: 'post',
  30. url: url
  31. }
  32. if (params) config.params = params
  33. return request(config)
  34. }
  35. }
  36. export default http

home.js配置

按照页面,每个页面创建一个js文件,统一管理api请求方式和地址

  1. import http from './http'
  2. export function getHomeAllData(){
  3. return http.get('/api/index')
  4. }

 VUE组建发起请求:

  1. <template>
  2. <h1>首页</h1>
  3. </template>
  4. <script>
  5. import {onMounted} from 'vue'
  6. import {getHomeAllData} from '@/api/home'
  7. export default {
  8. name: 'Home',
  9. components: {},
  10. setup() {
  11. onMounted(() => {
  12. getHomeAllData().then((response) => {
  13. console.log('正常响应')
  14. console.log(response)
  15. }).catch(error => {
  16. //发生错误时执行的代码
  17. console.log('异常响应')
  18. console.log(error)
  19. })
  20. })
  21. }
  22. }
  23. </script>

注意:

export与export default均可用于导出常量、函数、文件、模块等

export:多文件

export default:单文件

 常见疑问:
new vue({}) 只在入口文件 main.js里使用,而其余组件的里的属性和方法的使用,为什么都要放在export default{}中,而不是每个组件都用new Vue({})来生成呢?
放在export default{}中它是作为一个class被导出的么?
写法也不一样。就data来说,给作为new Vue的参数,它是对象。而在 export default中,它就成了方法。
解释:
export default是ES6的语法,用来导出模块,Vue 的单文件组件通常需要导出一个对象,这个对象是 Vue 实例的选项对象,以便于在其它地方可以使用 import 引入。

而 new Vue() 相当于一个构造函数,在入口文件 main.js 构造根组件的同时,如果根组件还包含其它子组件,那么 Vue 会通过引入的选项对象构造其对应的 Vue 实例,最终形成一棵组件树。

export default命令并不是在每个文件中都是必须的。它的作用只是用于导出模块,在别的模块需要调用这个模块的时候,可以通过import命令引入使用的,里面的data()方法要return。
 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/257186
推荐阅读
相关标签
  

闽ICP备14008679号