vue封装axios基本思路

Axios 是一个基于 promise 的 HTTP 库,能够用在浏览器和 node.js 中。在vue项目之中使用axios是一个很是明智的选择,由于vue官方已经宣称再也不维护vue-resource,而且推荐使用axios.vue

1 为何选择axios?node

  1. 使用axios能够统一作请求-响应拦截,例如响应时咱们将响应信息拦截起来,判断状态码,从而弹出报错信息
  2. 设定请求超时,例如3000ms未响应则中止请求
  3. 基于promise,能够很方便地使用then或者catch来处理请求
  4. 自动转换json数据

2 如何使用?ios

能够使用如下方式web

1. npm install axios --save
2. bower install axios --save
3. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

3 封装http请求
官网给定的实例:npm

axios.get('/user?ID=12345')
  .then(function(response){
    console.log(response);
  })
  .catch(function(err){
    console.log(err);
  });

在此基础上咱们应该再次封装http中的post get put delete方法,在具体页面只须要调用接口函数以及传入params便可,其他例如url,header之类的咱们应该进行封装。
例如在index.vue之中使用一个函数来实现经过id来获取对应的用户信息,返回结果在then方法的result之中json

API.getUserInfo({id:'01'}).then((result)=>{})

4 实现思路
新建一个文件,构建一个axios对象实例 例如axios.jsaxios

import axios from 'axios';
import router from '../router';
// 建立axios实例
const service = axios.create({            
  timeout: 30000 // 请求超时时间                                   
})
// 添加request拦截器 
service.interceptors.request.use(config => {         
  return config
}, error => {
  Promise.reject(error)
})
// 添加respone拦截器
service.interceptors.response.use(                  
  response => {
    let res={}; 
    res.status=response.status
    res.data=response.data;
    return res;
  },
  error => {
    if(error.response && error.response.status == 404){
     router.push('/blank.vue')
    }
   
        
    return Promise.reject(error.response)
  }
)

export function get(url, params = {}) {
  params.t = new Date().getTime(); //get方法加一个时间参数,解决ie下可能缓存问题.
  return service({
    url: url,
    method: 'get',
    headers: {     
    },
    params
  })
}


//封装post请求
export function post(url, data = {}) { 
  //默认配置 
  let sendObject={
    url: url,
    method: 'post',
    headers: {
      'Content-Type':'application/json;charset=UTF-8'       
    },
    data:data
  };
  sendObject.data=JSON.stringify(data);
  return service(sendObject)
}

//封装put方法 (resfulAPI经常使用)
export function put(url,data = {}){
  return service({
    url: url,
    method: 'put',
    headers: {
      'Content-Type':'application/json;charset=UTF-8'       
    },
    data:JSON.stringify(data)
  }) 
}
//删除方法(resfulAPI经常使用)
export function deletes(url){
  return service({
    url: url,
    method: 'delete',
    headers: {}
  }) 
}

//不要忘记export
export {
  service
}

上述代码主要实现一个基本的axios封装,请求成功时获取响应对象,咱们主须要获取几个有用的信息便可,例如状态码,数据便可,同时处理错误,例如返回404咱们跳转到一个新界面api

封装接口函数
新建文件,例如api.jspromise

import {get, post,deletes,put} from './axios.js' ;//导入axios实例文件中方法
let bsae_api = process.env.BASE_API ? './'+process.env.BASE_API :'..' //获取项目api请求地址
//根据id获取用户信息
export const getUserInfoById=(id)=>{
    return get(`${bsae_api}/web/user/${id}`); //resfulapi风格
}

具体页面使用 index.vue浏览器

import API from '@/utils/api'
getUserInfo(){
  API.getUserInfoById('01).then((result)=>{
   }).catch((error)=>{
 })
}

以上就是一些axios封装的基本介绍

相关文章
相关标签/搜索