zoukankan      html  css  js  c++  java
  • vue.js封装使用request.js

    代码

    import axios from 'axios';
    import { MessageBox, Message } from 'element-ui';
    import store from '@/store';
    import router from '@/router';
    import { setToken, getToken, removeToken } from "@/utils/cookies";
    
    // create an axios instance
    const service = axios.create({
        baseURL: store.state.baseDomain, // http://localhost:21021/
        // withCredentials: true, // send cookies when cross-domain requests
        //timeout: 5000 // request timeout
        //`xsrfCookieName`是要用作 xsrf 令牌的值的cookie的名称
        xsrfCookieName: 'XSRF-TOKEN', // default
        // `xsrfHeaderName`是携带xsrf令牌值的http头的名称
        xsrfHeaderName: 'X-XSRF-TOKEN', // default
    })
    
    // request interceptor
    service.interceptors.request.use(
        config => {
            // do something before request is sent
            let token = getToken();
            if (token != undefined && token != '') {
                // let each request carry token
                // ['X-Token'] is a custom headers key
                // please modify it according to the actual situation
                config.headers['Authorization'] = 'Bearer ' + token;
            }
            return config
        },
        error => {
            // do something with request error
            // console.log(error) // for debug
            return Promise.reject(error)
        }
    )
    
    // response interceptor
    service.interceptors.response.use(
        /**
           * If you want to get http information such as headers or status
           * Please return  response => response
          */
    
        /**
           * Determine the request status by custom code
           * Here is just an example
           * You can also judge the status by HTTP Status Code
           */
        response => {
            const res = response.data
    
            if (res.__abp) {
                return handleResponse(response)
            }
    
            // if the custom code is not 20000, it is judged as an error.
            if (response.status !== 200) {
    
                Message({
                    message: res.message || 'Error',
                    type: 'error',
                    duration: 5 * 1000
                })
    
                // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
                if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
                    // to re-login
                    MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
                        confirmButtonText: 'Re-Login',
                        cancelButtonText: 'Cancel',
                        type: 'warning'
                    }).then(() => {
                        store.dispatch('resetToken').then(() => {
                            location.reload()
                        })
                    })
                }
                return Promise.reject(new Error(res.message || 'Error'))
            } else {
                return res
            }
        },
        error => {
            // console.log('response error =>', error.response) // for debug
            if (error.response.data.__abp) {
                return handleResponse(error.response)
            }
            Message({
                message: error.message,
                type: 'error',
                duration: 5 * 1000
            })
            return Promise.reject(error)
        }
    )
    
    /**
     * 请求结果重新组织
     * 参考 Abp 的 js 是 abp.ng.js
     * @param {*} response
     */
    function handleResponse(response) {
        var originalData = response.data
        if (originalData.success === true) {
            response.data = originalData.result
            return response
        } else if (originalData.success === false) {
            // var messagePromise = null
    
            if (response.status == 401 && response.config.abpHandleError !== false) {
                // abp.ng.http.handleUnAuthorizedRequest(messagePromise, originalData.targetUrl);
                // 会话过期,跳转到登录页
                store.dispatch('resetToken').then(_ => {
                    router.push(`/login?redirect=${location.hash.replace('#', '')}${location.search}`).catch(() => { })
                })
                originalData.error.message = '为了您的帐号安全,请重新登录';
            }
    
            if (originalData.error) {
                if (response.config.abpHandleError !== false) {
                    Message.error(originalData.error.message || '请求出错了!!!')
                }
            } else {
                originalData.error = defaultError
            }
    
            response.data = originalData.error
            return Promise.reject(response)
    
        } else {
            // not wrapped result
            return Promise.reject(response)
        }
    }
    
    window.request = service;
    export default service

     示例:

    import request from '@/utils/request'
    
    export function login(data) {
        return request({
            url: `/api/TokenAuth/Authenticate`,
            method: 'post',
            data
        })
    }
  • 相关阅读:
    Linux设置静态IP
    jenkins+findbugs
    CentOS 6.6 安装 Node.js
    未来物联网、人工智能无法迈过的技术是什么
    未来物联网、人工智能无法迈过的技术是什么
    spss-数据清洗-处理重复数据
    spss-数据清洗-处理重复数据
    大数据时代数据管理方式研究
    大数据时代数据管理方式研究
    Excel表格文本格式的数字和数字格式如何批量转换
  • 原文地址:https://www.cnblogs.com/xsj1989/p/14341459.html
Copyright © 2011-2022 走看看