axios的封装(超详细简易版)

打印 上一主题 下一主题

主题 805|帖子 805|积分 2415

1、安装 axios

起首,通过 npm 安装 axios:
这里附上axios中文网:Axios中文文档 | Axios中文网
  1. npm install axios
复制代码
2、创建 axios 实例

 在项目目录中新建一个 utils 文件夹,然后在内里创建一个 request.js 文件用于封装 axios。
  1. //第一步我们先引入axios模块
  2. import axios from "axios";
  3. //这里的话有token的需求我们可以获取一下token,方便我们进行请求的时候使用
  4. function getToken() {
  5.     //这里可以根据你项目具体来获取
  6.     const token = window.sessionStorage.getItem("token");token
  7.     return token || "";
  8. }
  9. //第二步我们创建一个axios实例对象,然后用函数Factory封装一下
  10. function Factory({ baseURL, code, msg, callFail }) {
  11.     const $http = axios.create({
  12.         baseURL,
  13.         timeout: 1000 * 60 * 5, //超时时间
  14.     });
  15.     //请求拦截器,我们可以在请求拦截器中设置token,或者对请求进行一些处理
  16.     $http.interceptors.request.use(
  17.         (config) => {
  18.             //这里我们可以设置token
  19.             const token = getToken();
  20.             if (token) {
  21.                 config.headers["AuthoriZation"] = token;
  22.             }
  23.             return {
  24.                 headers: {
  25.                     //这里我们还可以设置请求头
  26.                     "Content-Type": "application/json;charset=UTF-8",
  27.                     //......
  28.                 },
  29.                 ...config,
  30.                 validateStatus: (status) => {
  31.                     //这里我们设置状态码的判断条件,如果返回的状态码在200到300之间就表示请求成功,否则就是失败
  32.                     return (status >= 200 && status < 300) || status === 401;
  33.                 },
  34.             };
  35.         },
  36.         (error) => {
  37.             //这里我们处理请求错误
  38.             return Promise.reject(error);
  39.         }
  40.     );
  41.     //响应拦截器,我们可以在响应拦截器中返回的数据或者错误信息进行处理
  42.     $http.interceptors.response.use((response) => {
  43.         //这里我们处理响应数据
  44.         const data = response.data;
  45.         if (+data.code === 200 || +data.code === 0) {
  46.             return data;
  47.         } else if (+data.code === 401) {
  48.             console.error("请求报错提示:token失效,请重新登录");
  49.         }else {
  50.             console.error("请求报错提示:", data,msg || "请求失败");
  51.         }
  52.         return Promise.reject(data.msg || "请求失败");
  53.     },
  54.     error => {
  55.         //这里我们处理响应错误
  56.         console.error("请求报错提示:", error,msg || "请求失败");
  57.         return Promise.reject(error);
  58.     });
  59.     return $http;
  60. }
  61. //第三步我们导出axios实例对象
  62. export default Factory;
复制代码
3、使用封装好的 axios

 在项目标API文件模块中引入并使用封装好的 axios 实例:
  1. import request from '@/utils/request';
  2. // 示例请求
  3. export function getUserInfo() {
  4.   return request({
  5.     url: '/user/info',
  6.     method: 'get'
  7.   });
  8. }
复制代码
4、在其他组件引入(Vue)

这里我拿vue来举个例子
文件目录

  1. <template>
  2.   <div>
  3.     <h1>用户信息</h1>
  4.     <p v-if="error">{{ error }}</p>
  5.     <div v-else>
  6.       <p>用户名: {{ userInfo.name }}</p>
  7.       <p>邮箱: {{ userInfo.email }}</p>
  8.     </div>
  9.   </div>
  10. </template>
  11. <script>
  12. //引入我们的api
  13. import { getUserInfo } from '@/api/user';
  14. export default {
  15.   data() {
  16.     return {
  17.       userInfo: {},
  18.       error: ''
  19.     };
  20.   },
  21.   created() {
  22.     this.fetchUserInfo();
  23.   },
  24.   methods: {
  25.     //这里大家可以使用async await,也可以使用promise请求
  26.     async fetchUserInfo() {
  27.       try {
  28.         const response = await getUserInfo();
  29.         this.userInfo = response.data;
  30.       } catch (error) {
  31.         this.error = '无法获取用户信息';
  32.         console.error(error);
  33.       }
  34.     }
  35.   }
  36. };
  37. </script>
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

三尺非寒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表