美文网首页
axios封装

axios封装

作者: 用技术改变世界 | 来源:发表于2021-04-23 14:47 被阅读0次

import axios from 'axios';

import { ContextService } from '@wit-vue/common';

import { IObjectConfig } from '../../model/interface/axios.interface';

import { StorageService } from '@wit-vue/storage';

import InterceptorService from './interceptor';

/* 创建实例 */

const instance = axios.create({

    baseURL: ContextService.getContext().config.get('GRACE_SERVICE_URL') + '/service/v1',

    headers: {

        'Content-Type': 'application/json',

        'Cache-Control': 'no-cache'

    },

    responseType: 'json',

    validateStatus: status => {

        return status >= 200 && status < 500;

    }

});

instance.interceptors.request.use(

    async config => {

        await StorageService.getSessionStorageByKey('token').then(assertion => {

            let assertionValue = assertion ? assertion : sessionStorage.getItem('token');

            const token = assertionValue;

            if (token) {

                config.headers['Access-Token'] = token;

            }

        });

        return config;

    },

    (error: any) => {

        return Promise.reject(error);

    }

);

instance.interceptors.response.use(

    response => {

        // 处理json问题

        if (response.config.url.endsWith('.json')) {

            return response.data;

        }

        if (response.data.code === '1') {

            if (response.data.data || response.data.data === null) {

                return response.data.data;

            } else {

                return response.data;

            }

        } else {

            let url = response.config.baseURL + response.config.url;

            InterceptorService.getHintMessage(response.data, url);

            return response.data;

        }

    },

    error => {

        return Promise.reject(error);

    }

);

/* 输出实例 */

export const RestfulClientService = {

    get(obj: IObjectConfig) {

        return Promise.resolve(

            instance.get(obj.url, {

                params: obj.data ? obj.data : {}

            })

        );

    },

    post(obj: IObjectConfig) {

        return Promise.resolve(instance.post(obj.url, obj.data ? obj.data : {}));

    },

    delete(obj: IObjectConfig) {

        return Promise.resolve(

            instance.delete(obj.url, {

                data: obj.data ? obj.data : {}

            })

        );

    },

    put(obj: IObjectConfig) {

        return Promise.resolve(instance.put(obj.url, obj.data ? obj.data : {}));

    },

    patch(obj: IObjectConfig) {

        return Promise.resolve(

            instance.patch(obj.url, {

                data: obj.data ? obj.data : {}

            })

        );

    }

};

相关文章

网友评论

      本文标题:axios封装

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