当前位置:   article > 正文

Vue3 TypeScript 封装axios_vue3+ts 封装axios

vue3+ts 封装axios

1.首先安装 axios相关依赖,与TypeScript 类型声明

npm install @types/axios --save-dev

    或

npm install axios vue-axios -S

  2.vue3调用axios

  1. //先引入在页面文件
  2. import axios from "axios";
  3. //在setup函数中定义请求函数
  4. const fetchData = async () => {
  5. try {
  6. const response = await axios.get(
  7. "http://47.94.4.201/index.php/index/index/getcode"
  8. );
  9. console.log(response.data);
  10. } catch (error) {
  11. console.error(error);
  12. }
  13. };
  14. //在生命周期或点击事件调用
  15. fetchData();

     使用vue3+ts 封装axios

                   1).在src路径创建一个api文件夹  在api下创建一个http.ts

                   2).在http.ts写入

  1. import axios, { InternalAxiosRequestConfig, AxiosInstance, AxiosResponse } from 'axios';
  2. const axiosInstance: AxiosInstance = axios.create({
  3. baseURL: 'http://47.94.4.201/index.php/index/index/getcode',
  4. timeout: 5000,
  5. });
  6. // 添加请求拦截器
  7. axiosInstance.interceptors.request.use(
  8. (config: InternalAxiosRequestConfig) => {
  9. // 在发送请求之前做些什么
  10. return config;
  11. },
  12. (error: any) => {
  13. // 处理请求错误
  14. return Promise.reject(error);
  15. },
  16. );
  17. // 添加响应拦截器
  18. axiosInstance.interceptors.response.use(
  19. (response: AxiosResponse) => {
  20. // 对响应数据做点什么
  21. return response;
  22. },
  23. (error: any) => {
  24. // 处理响应错误
  25. return Promise.reject(error);
  26. },
  27. );
  28. export default axiosInstance;

                  3).页面文件

  1. //先引入
  2. import api from "@/api/http";
  3. api
  4. .get("/")
  5. .then((response) => {
  6. console.log(response.data);
  7. })
  8. .catch((error) => {
  9. console.error(error);
  10. });

                4).想要axios二次封装,需要在api文件夹创建一个http.ts
 

  1. import http from '@/api/api';
  2. export const getCode = () => {
  3. return http.get('/index.php/index/index/getcode');
  4. };

                   二次封装后在页面文件,少许更改

  1. vue
  2. <script lang="ts" setup>
  3. import { ref, onMounted } from "vue";
  4. import { getCode } from "@/api/http";
  5. const code = ref<any>();
  6. onMounted(() => {
  7. getCode()
  8. .then((response) => {
  9. code.value = response.data.msg;
  10. })
  11. .catch((error) => {
  12. console.error(error);
  13. });
  14. });
  15. const login = () => {
  16. console.log(name.value);
  17. };
  18. </script>

      二次封装axios,封装get 、post方法

  1. //api.ts
  2. import axios, { InternalAxiosRequestConfig, AxiosInstance, AxiosResponse } from 'axios';
  3. const http: AxiosInstance = axios.create({
  4. baseURL: 'http://47.94.4.201',
  5. timeout: 5000,
  6. });
  7. // 添加请求拦截器
  8. http.interceptors.request.use(
  9. (config: InternalAxiosRequestConfig) => {
  10. // 在发送请求之前做些什么
  11. return config;
  12. },
  13. (error: any) => {
  14. // 处理请求错误a
  15. return Promise.reject(error);
  16. },
  17. );
  18. // 添加响应拦截器
  19. http.interceptors.response.use(
  20. (response: AxiosResponse) => {
  21. // 对响应数据做点什么
  22. return response;
  23. },
  24. (error: any) => {
  25. // 处理响应错误
  26. return Promise.reject(error);
  27. },
  28. );
  29. export const get = <T>(url: string, config?: InternalAxiosRequestConfig): Promise<T> => {
  30. return http.get<T>(url, config).then(response => response.data);
  31. };
  32. export const post = <T>(url: string, data?: any, config?: InternalAxiosRequestConfig): Promise<T> => {
  33. return http.post<T>(url, data, config).then(response => response.data);
  34. };
  35. export default http;
  1. //http.ts
  2. import {get,post} from '@/api/api'
  3. export const getCode = () => {
  4. return new Promise((resolve, reject) => {
  5. get("/index.php/index/index/getcode")
  6. .then((res) => {
  7. resolve(res);
  8. })
  9. .catch((err) => {
  10. reject(err);
  11. });
  12. });
  13. };
  1. //页面文件
  2. //引入
  3. import { getCode } from "@/api/http";
  4. //声明
  5. const code = ref<any>();
  6. onMounted(() => {
  7. getCode().then((ser: any) => {
  8. code.value = ser.msg;
  9. });
  10. });

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

闽ICP备14008679号