zoukankan      html  css  js  c++  java
  • 大型项目axios封装

    目录结构

    ├─ src   
    |   ├── apis                                    
    |   |   ├── api.js                              // 返回值和错误统一处理 ,  统一管理
    |   |   ├── login.js                            //模块或页面下的请求
    │  ├──request                               // 基本配置
    │  │   ├── service.js                      //统一处理接口 , 拦截 , 状态处理
    │  │   ├── common.js                         //传参处理 
    │  │   ├── apiUrl.js                        //接口url

    service.js

    //统一处理接口 , 拦截 , 状态处理
    import axios from 'axios'
    import {
      BASEURL
    } from './apiUrl'
    //获取token
    function getToken() {
      let token = window.sessionStorage.getItem('token') || ''
      return token;
    }
    
    //创建axios实例
    var serive = axios.create({
      baseURL: BASEURL, // 'https://mock.cangdu.org/mock/5fb233ffbcab7337c1b1c295/example', //请求接口公共部分
      timeout: 5500 //等待时间
    })
    
    //配置默认请求头类型
    serive.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
    serive.defaults.headers.get['Content-Type'] = 'application/json;chartset=utf-8'
    //请求拦截器
    serive.interceptors.request.use(
      config => {
        if (getToken()) {
    //根据实际需求进行请求头设置
          config.headers['token'] = getToken();
          config.headers['Content-Type'] = 'application/json;chartset=utf-8';
        } else { //如果没有登录则跳转登录页
          // routers.push('/login')
        }
        return config
      },
      err => Promise.reject(err)
    )
    //响应拦截器
    serive.interceptors.response.use(
      response => {
        let res = response.data;
    //分别对不同的情况进行处理
        if (res.code == '400') {
        
        } else if (res.code == '401') {
    
        }
        return Promise.resolve(response.data)
      },
      err => Promise.reject(err)
    )
    
    export default serive

    common.js

    //传参处理 细分解藕
    import serive from './service'
    export function requestOfPost(url, data) {
      return serive.post(url, data);
    }
    
    export function requestOfGet(url, data) {
      return serive.get(url, data);
    }

    apiUrl.js

    //接口url , 在编译时会打乱 , 反编译也无法获取 , 安全性提高
    export const BASEURL = 'https://mock.cangdu.org/mock/5fb233ffbcab7337c1b1c295/example';
    export const loginUrl = '/upload';
    export const getUrl = '/query'

    api.js

    //返回值和错误统一处理 , 细分解耦 ,高度封装 , 统一管理
    import {
      requestOfPost,
      requestOfGet
    } from '../request/common.js'
    export function postRequest(url, data) {
      return new Promise((resolve, reject) => {
        requestOfPost(url, data).then(res => resolve(res)).catch(err => reject(err))
      })
    }
    
    export function getRequest(url, data) {
      return new Promise((resolve, reject) => {
        requestOfGet(url, data).then(res => resolve(res)).catch(err => reject(err))
      })
    }

    login.js

    //login接口管理
    import {
      postRequest
    } from './api';
    
    export function loginApi(parmas, callback) {
      postRequest('/upload', parmas, callback)
    }

    如何用?

    举例:

      

    <template>
      <div class="hello">
        <h1>{{ msg }}</h1>
        <h2>Essential Links</h2>
        <button @click="loginHandle">登录</button>
        <button @click="loginHandle2">登录2</button>
        <div class="ddd">123</div>
      </div>
    </template>
    
    <script>
    import { loginUrl, getUrl } from "../request/apiUrl.js";
    import { postRequest, getRequest } from "../api/api.js";
    export default {
      name: "HelloWorld",
      data() {
        return {
          msg: "Welcome to Your Vue.js App",
        };
      },
      methods: {
        async loginHandle() {
          console.log($(".ddd"));
          let params = {
            password: 123456,
            userName: "admin",
          };
          let data = await postRequest(loginUrl, params);
          console.log(data);
        },
        loginHandle2() {
          let params = {
            password: 123456,
            userName: "admin",
          };
          getRequest(getUrl, params).then((res) => console.log(res));
        },
      },
    };
    </script>
    
    
  • 相关阅读:
    shell中的 echo命令
    shell中的运算符
    shell中的替换
    shell中的元字符
    springcloud-sleuth的使用
    springcloud-sleuth之zipkun运行和概念介绍
    springcloud-sleuth是什么
    消息总线(bus)和消息驱动(stream)的区别
    springcloud-stream之持久化
    springcloud-stream之消费者重复消费
  • 原文地址:https://www.cnblogs.com/wxyblog/p/13998981.html
Copyright © 2011-2022 走看看