vue项目中axios的封装和接口的统一管理

在src下面新建一个axios文件夹和一个api文件夹,然后在axios里面新建index文件,index文件用于封装axios,在api文件夹里面按模块管理接口。

axios/index.js

1.引入
引入qs模块,用来序列化post类型的数据

2.环境的切换
我们的项目环境有开发环境、测试环境和生产环境,node的环境变量来匹配我们的默认的接口url前缀。axios.defaults.baseURL可以设置axios的默认请求地址。

3.设置请求超时
通过axios.defaults.timeout设置默认的请求超时时间。

4.设置请求头
post请求需要请求头,我们设置了一个默认请求头application/x-www-form-urlencoded;charset=UTF-8

在这里插入图片描述
6.请求拦截

// 请求拦截    在发送之前做一些事情   比如在headers请求头中加字段
axios.interceptors.request.use(
    (req) => {                         
        if (req.method === 'post') {
            req.data = qs.stringify({ 'inputJson': JSON.stringify(optionObject) });
        }
        return req
    }, (error) => {
        Message.error({ message: '请求超时!' })
        Promise.reject(error)
    }
)

7.响应拦截

// 响应请求   在接受到响应后进行一些操作  比如服务器返回登录状态失效,需要重新登录时跳转到登录页
axios.interceptors.response.use(
    response => {
        return response
    }, err => {
        if (err.response.status == 404) {
            router.push('/mistaken');
        } else if (err.response.status == 401) {
            Message.warning({ message: '请重新登录!' });
            store.commit('userInfo', '')
            router.push('/LoginView');
        } else {};
        return Promise.reject(error.response);  
    }
)

8.封装get和post方法

export function get(url, params){    
    return new Promise((resolve, reject) =>{        
        axios.get(url, {            
            params: params        
        })        
        .then(res => {            
            resolve(res.data);        
        })        
        .catch(err => {            
            reject(err.data)        
        })    
    });
}

export function post(url, params) {    
    return new Promise((resolve, reject) => {         
        axios.post(url, params)        
        .then(res => {            
            resolve(res.data);        
        })        
        .catch(err => {            
            reject(err.data)        
        })    
    });
}

api/loginview.js(以登录模块为例)

首先引入get和post方法,然后通过export导出定义好的login方法

import { get, post } from '../axios/index'
export const Login = p => post('sm/admin/login', p);
export const DataCenterLogin = p => post(this.screenurl+'DataCenterLogin', p);

login.vue

在login引入login方法并调用

import {Login,DataCenterLogin} from '@/api/loginview';
Login(data).then((res) => {
    if(res.data.success == 1) {}              
}).catch((res) => {
    this.$message.error(res.data.msg);
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值