vue中axios封装

在vue项目中,我们经常是使用axios去与后台进行数据交互,axios是基于http的promise库。

  1. 安装axios
npm install axios
  1. 新建文件夹http,里面建立文件http.js,引入axios
import axios from 'axios'
  1. 可以根据process.env.NODE_ENV判断开发的环境,比如development,production,不同的环境可以使用不同的请求域名等等。

  2. 创建axios 及请求头

import systemConfig from './config'
var instance = axios.create({
    baseURL: systemConfig.apiUrl, // 公共接口url(如果有多个的公共接口的话,需要处理)
    timeout: 60000, // 请求超时 10s
});
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
  1. 请求拦截
instance.interceptors.request.use(config => {
    let passport = localStorage.getItem('token');
    config.headers.Authorization = 'Bearer ' + passport
    return config;
  }, function (error) {
    return Promise.reject(error);
});

请求拦截是指发送请求之前进行操作。这里简单写了下逻辑,如果本地存有token,可以把token加载请求头里面,这样我们请求就会带有token,当然可以根据具体的项目需求,在header里面自己加其它的属性。

  1. 响应拦截
instance.interceptors.response.use(
    response => response.status === 200 ? Promise.resolve(response) : Promise.reject(response),    
    error => {
      console.log('_______________',error.response)
    if (error.response.status == 401) {
        Toast('用户未登录');
    }else if(error.response.status == 403){
        Toast('登录过期,请重新登录');
    }else if(error.response.status == 404){
        Toast('网络请求不存在');
    }else{
        Toast('服务器请求错误')
    }
});

响应拦截指服务器返回了数据,我们拿到前对它进行处理。如果返回的是200,表示成功拿到数据,否则就要进行相应的错误统一处理。比如401,表示用户是没有登录的状态,这时候我们可以跳转到登陆页面,让用户去登陆。具体的状态码。可以和后台商量统一。

  1. 封装get和post
//封装get
const get = function(url, params = {}){  
    return new Promise((resolve, reject) =>{        
        instance.get(url,{params:params}).then(res => {
            resolve(res.data);
        }).catch(err =>{
            reject(err.data)
        })    
    })
}
//封装post
const post = function(url, params = {}) {
    return new Promise((resolve, reject) => {
        instance.post(url, params)
         .then(res => {
            resolve(res.data);
         })
         .catch(err =>{
            reject(err.data)
         })
    });
}
export default {get,post,put}

一般请求的方式为get和post,当然也会用到put和delete等等。我们通过定义一个函数,函数有两个参数,第一个参数表示我们要请求的url地址,第二个参数是我们要携带的请求参数。返回一个promise对象,当axios其请求成功时resolve服务器返回 值,请求失败时reject错误值。最后通过export default 抛出get函数。
需要注意的是,get和post用法相似,只是参数的格式不一样。get是一个对象里面,有一个key params对应的值为对象,而post参数就是一个对象。

  1. main.js引入
import instance from './http/http.js'
Vue.prototype.$http = instance

然后我们就可以在页面调用get和post请求了

   this.$http.get('xx/xx',params).then(res => {

  }).catch(err => {
    
  })
  1. 有时候我们的项目请求的域名会不止一个,这个时候我们可以对api进行统一的管理、更加模块化。
    新建文件api.js,config里面域名修改
const apiUrl= {    
   url1: 'https://xxxx.com/',    
   url2: 'http://xxxxx.com/'
}
export default apiUrl

在api.js里面引入
import systemConfig from ‘./config’ // 导入接口域名列表
import axios from ‘./http.js’ // 导入http中创建的axios实例

const article = {    
    // 新闻列表    
    articleList () {        
        return axios.get(`${apiUrl.apiUrl.url1`, {            
            params: params        
        });    
    },    
    // 新闻详情,演示    
    articleDetail (id, params) {        
        return axios.get(`${apiUrl.apiUrl.url2}`, {            
            params: params        
        });    
    },
    // 其他接口…………
}
export default article

main.js引用

import api from './api' // 导入api接口
Vue.prototype.$api = api; // 将api挂载到vue的原型上复制代码

在页面调用:

   this.$api.article.articleDetail(id, {        
       api: 123      
   }).then(res=> {
       // 执行某些操作      
   }) .catch(()=>{
   
   })

以上就是对axios的简单使用,包括拦截器和get、post封装,api的模块化管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值