数据可视化大屏使用axios请求数据

vue yekong

数据可视化大屏项目开发中,经常需要请求数据,今天讲接口请求数据的流程记录一下。

axios封装

我们创建一个文件request.js

import axios from 'axios'
// import {Message} from 'element-ui'
import {baseUrl} from '@/api/ipConfig'
// 刷新token的一个开关,防止重复请求
let isRefreshing = true;

const service = axios.create({
    baseURL: baseUrl + '', // 测试IP
    timeout: 100000, // request timeout
})

// request interceptor
service.interceptors.request.use(config => {
    // 获取本地存储的token
    let token = localStorage.getItem('access_token')
    if (token) {
        config.headers['Authorization'] = 'Basic c2FiZXI6c2FiZXJfc2VjcmV0' // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
        config.headers['Blade-Auth'] = token // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
    }
    return config
}, error => {
    Promise.reject(error)
})

// respone interceptor
service.interceptors.response.use(
    // response => response,
    response => {
        const res = response.data
        return res;
    },
    error => {
        if (error.response.data.code == 401) {
            if (isRefreshing) {
                isRefreshing = false;
                return refreshToken().then((res) => {
                    const data = res.data;
                    if (data.access_token) {
                        localStorage.setItem('access_token', data.access_token)
                        // 已经刷新了token,将所有队列中的请求进行重试
                        window.location.reload();
                    } else {
                        return false;
                    }
                }).catch(() => {
                    return false;
                }).finally(() => {
                    isRefreshing = true
                })
            }
        }
        return Promise.reject(error)
    })

// 刷新token请求
function refreshToken() {
    return axios.post(`${baseUrl}/api/blade-auth/oauth/token?tenantId=000000&username=DP001&password=efc3d451b28e58fdbffde31ec4c37b86&grant_type=password&scope=all&type=account`, null, {
        headers: {
            'Tenant-Id': '000000',
            'Authorization': 'Basic c2FiZXI6c2FiZXJfc2VjcmV0'
        }
    });
}

export default service

创建文件

创建一个文件ipConfig.js,用来存放我们的开发接口和生产接口地址

var productionUrl = '' // 生产环境接口
var DevelopmentUrl = '' // 开发环境接口
export const baseUrl = process.env.NODE_ENV === 'production' ? productionUrl : DevelopmentUrl

api接口封装

创建一个文件 LargeScreenData.js,用来封装我们请求的接口。如果接口是get类型method就设置为get post类型method就设置为post.

import request from '../request'
import qs from 'qs'

// post登录
export function login(data) {
    return request({
        url: '/api/login',
        method: 'post',
        data
    })
}

// get登录
export function getLogin(data) {
    console.log(data, 'data')
    return request({
        url: '/api/login?' + qs.stringify(data),
        method: 'get',
        data
    })
}

接口请求实例

引入我们要请求的接口

import {getLogin} from "@/api/api/LargeScreenData.js";

请求接口获取数据

我们使用async和await来请求接口获取数据。

mounted() {
    this.getData()
},
methods: {
async getData() {
  try {
    const res = await getLogin({user: 'admin', password: '123456'});
    this.list = res.data;
  } catch (err) {
    console.error(err);
  }
},
喜欢