美文网首页Vue
axios入门+封装

axios入门+封装

作者: 拾钱运 | 来源:发表于2019-09-28 15:01 被阅读0次

    axios传送门:http://www.axios-js.com/

    axios的理解

    axios是通过promise实现对ajax技术的一种封装,就像jquery实现ajax封装一样。
    vue2之后vue-resource就不在更新了,推荐使用axios,
    axios可以拦截请求和响应,在then() catch处理前拦截他们,可以用在请求动画等
    简单来说:ajax技术实现了网页的局部数据刷新,axios实现了对ajax的封装

    优缺点

    ajax

    ajax,本身是针对mvc的编程,不符合现在前端的mvvm的浪潮
    ajax,基于原生xhr开发,XHR本身的架构不清晰,已经有了fetch的替代方案
    query整个项目太大,单纯使用ajax却要引入整个jquery非常不合理

    axios

    从node.js创建http请求
    支持promise api
    客户端支持防止(csrf)网站恶意利用
    提供了一些并发请求接口(重要,方便了很多的操作)

    axios.all([
        axios.get('data.json'),
        axios.get('city.json')
    ]).then(
      axios.spread((dataRes,cityRes)=>{
        console.log(dataRes,cityRes)
    })
    ).catch(err=>{})
    

    all同时进行两个请求,同时输出两个结果,
    spread在继续对返回值处理,输出
    当需要同时请求多个接口时,并同时处理返回值时可以使用并发请求

    axios.post('/login',{username:'zmq',pwd:'123'}).then(res=>{})
    axios.get('/login',params:{username:'zmq',pwd:'123'}).then(res=>{})
    

    通用使用

    //axios(config)
    axios({
      methods:'post',
      url:'http://jsonplaceholder.typicode.com/users',
      data:{
          name:'zmq'
      }
    }).then(res=>{
    
    }).catch(err=>{})
    

    并发请求

    function  getUserAccount(){
      return axios.get('/user/12345')
    }
    function getUserPromise(){
      return axios.get('/user1/1235')
    }
    axios.all([getUserAccount(),getUserPromise()]).then(
      axios.spread((data1,data2)=>{
        console.log(data1,data2)
      })
    )
    

    axios的封装

    首先了解:
    vue分为开发环境,生产环境,vue-cli自动切换环境
    vue中config 中的
    dev.env.js为开发环境变量
    prod.env.js为生产环境变量
    通过process.env.NODE.ENV获取各环境中的变量
    因为请求的接口开发和生产环境不同,生产环境直接‘’除域名没其他添加的时候
    通过以下代码修改axios中baseURL
    axios中baseURL的作用:自动添加在url前面,除非url是绝对url,
    它可以通过设置一个baseURL便于axios实例方法传递相对的url

    axios.defaults.baseURL=process.env.API
    

    封装主要是封装一个统一的拦截器,拦截请求前数据做统一处理,响应后数据做统一处理。
    拦截请求可以做一些请求动画
    响应拦截可以判断用作判断响应状态码,例如,本地存储了用户的信息,在一段时间内,是登录状态,当超时的时候,本地信息过期,这时候在去拿本地信息请求数据,后台就会返回信息过期的状态码,这个时候可以拦截下状态码,同时将本地登录信息清除,让用户重新登录
    第二个封装就是,封装统一的请求接口的文件,将所有接口放在一个文件或者多种类型文件中。使用的时候直接在vue中使用封装好的方法
    http.js

    import  axios from 'axios'
    let $http=axios.create()
    $http.defaults.baseURL=process.env.API //在congif  dev.env.js  prod.env.js 中设置的
    //请求拦截
    $http.interceptors.request.use(
      config=>{
          return config
      },
      err=>{
          return Promise.reject(err)
      }
    )
    //响应拦截
    $http.interceptors.response.use(
        response=>{
            if(response.data.errcode==40023){
              localStorage.clear()
            this.$router.path('/login')
            }else{
                //当前还是登陆状态
           }
       }
      )
    
    //统一接口请求封装
    function  fetch(method='get',url,params){
       return new Promise((resolve,reject)=>{
           $http(
           {
              url:url,
              method:method,
              data:params
            }
             ).then(res=>{
                reslove(res)
             }).catch(err=>{
                reject(err)
            })
       })
    }
    export  default  fetch
    

    api.js

    import fetch from './http.js';
    export default{
        login(params){
          return fetch('post','/login',params)
        }
    }
    

    login.vue 使用

    import comService from '../common/api/comService'
    let params={
      username:'zmq',
      pws:'123'
    }
    comService.login(params).then(data=>{
        console.log(data)
    })
    

    相关文章

      网友评论

        本文标题:axios入门+封装

        本文链接:https://www.haomeiwen.com/subject/avmructx.html