zoukankan      html  css  js  c++  java
  • xios封装

    封装的意义

    1.提高代码可读性
    2.提高代码可维护性
    3.减少代码书写

    封装

    import axios from 'axios'
    axios.defaults.baseURL = 'http://127.0.0.1:8000'
    
    // 全局设置网络超时
    axios.defaults.timeout = 10000;
    
    //设置请求头信息
    axios.defaults.headers.post['Content-Type'] = 'application/json';
    axios.defaults.headers.put['Content-Type'] = 'application/json';
    
    axios.interceptors.request.use(
      config => {
        // 每次发送请求之前判断是否存在token,如果存在,统一在http请求的header都加上token,不用每次请求都手动添加
        const token = localStorage.getItem('token')
        // console.log(token)
        if(token){
          config.headers.Authorization = 'JWT' + token
        }
        return config;
      },
      error => {
        return Promise.error(error);
      })
    
    axios.interceptors.response.use(
      //请求成功
      // res => res.status === 200 ? Promise.resolve(res) :
    Promise.reject(res),
      res => {
        if(res){
          //加上201是因为modelviewset的post请求成功的状态码是201
          if(res.status === 200 || res.status === 201){
            return Promise.resolve(res)
          }
        }
      },
      //请求失败
      error => {
        if(error.response){
          // 判断⼀下返回结果的status == 401? ==401跳转登录⻚⾯。 !=401passs
          // console.log(error.response)
          if (error.response.status === 401){
            // 跳转不可以使⽤this.$router.push⽅法、
            // this.$router.push({path:'/login'})
            window.location.href = 'http://127.0.0.1:8888/'
          }else{
            // errorHandle(response.status, response.data.message);
            return Promise.reject(error.response);
          }
          // 请求已发出但是不在2xx的范围
        }else {
          // 处理断⽹的情况
          // eg:请求超时或断⽹时,更新state的network状态
          // network状态在app.vue中控制着⼀个全局的断⽹提示组件的显示隐藏
          // 关于断⽹组件中的刷新重新获取数据,会在断⽹组件中说明
          // store.commit('changeNetwork', false);
           return Promise.reject(error.response);
        }
      }
    )
    
    //封装axios
    //封装get请求
    export function axios_get(url,params){
      return new Promise(
        (resolve,reject)=>{
          axios.get(url,{params:params}).then(res=>{
            // console.log("封装信息的的res", res)
            resolve(res.data)
          }).catch(err=>{
            reject(err.data)
          })
        }
      )
    }
    
    //封装post请求
    export function axios_post(url,data){
      return new Promise(
        (resolve,reject)=>{
          // console.log(data)
          axios.post(url,JSON.stringify(data)).then(res=>{
            // console.log("封装信息的的res", res)
            resolve(res.data)
          }).catch(err=>{
            reject(err.data)
          })
        }
      )
    }
    
    //封装put请求
    export function axios_put(url,data){
      return new Promise(
        (resolve,reject)=>{
          // console.log(data)
          axios.put(url,JSON.stringify(data)).then(res=>{
            // console.log("封装信息的的res", res)
            resolve(res.data)
          }).catch(err=>{
            reject(err.data)
          })
        }
      )
    }
    
    //封装delete请求
    export function axios_delete(url,data){
      return new Promise(
        (resolve,reject)=>{
          // console.log(data)
          axios.delete(url,{params:data}).then(res=>{
            // console.log("封装信息的的res", res)
            resolve(res.data)
          }).catch(err=>{
            reject(err.data)
          })
        }
      )
    }
    //⼀定要导出函数
    export default axios;
    

      

    使用

    //将我们http.js中封装好的 get,post.put,delete 导过来
    import {axios_get,axios_delete,axios_post,axios_put} from './http.js'
    export const user_add = p => axios_post("/app02/user/", p) // 获取七⽜云token
    

      

    <script>
      // 导入axios函数
      import {user_add} from '../api/api'
        export default {
          data(){
            return{
              username:'',
              age:'',
              home:'',
              hight:'',
              roles:'',
              classrooms:'',
            }
          },
          methods:{
            add(username){
              let data={
                "username":this.username,
                "age":this.age,
                "home":this.home,
                "hight":this.hight,
                "roles":[this.roles],
                "classrooms":this.classrooms
              }
              //直接使用导入的axios函数
              user_add(data).then(res=>{
                console.log(res)
                if(res.code==200){
                  alert('添加成功')
                  sessionStorage.setItem("username",username)
                  this.$router.push({path:'/userdel'})
                }else {
                  alert('添加失败')
                }
              }).catch(error=>{
                console.log(error)
              })
            }
          },
        }
    </script>
    

      

     

  • 相关阅读:
    课后作业03-以淘宝网为例从质量的六个属性描述分析
    软件体系架构课后作业02-架构漫谈阅读笔记
    java中怎样跳出当前的多层循环嵌套
    redis二级缓存的五种数据类型的常用命令
    递归算法 菲波那切数列 (一个楼梯有n阶,每一次可以走一个台阶或者二个台阶请问总共有几种走法)
    restful代码风格
    java开发工程师面试题总结(适用于1-2年工作经验的人)
    Java中HashMap与HashTable的联系与区别
    HashMap扩容因子默认是0.75?底层数据结构? hash函数处理冲突的集中方式?
    设计模式
  • 原文地址:https://www.cnblogs.com/GlfLss/p/14040278.html
Copyright © 2011-2022 走看看