常见axios的封装

vue2

import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
import Mock from 'mockjs'

// 将axios设置为全局属性
Vue.use(VueAxios,axios)
// 将Mock设置为全局属性
//Mock是模拟接口数据的
Vue.prototype.Mock = Mock

// 创建一个新的axios对象,用来请求token
const newAxios = axios.create({baseURL: '/v1'})
// 配置全局基础URL地址
axios.defaults.baseURL = '/v1'
// 配置全局的请求超时时间
axios.defaults.timeout = 3000
// 请求token账号 
const username = 'jack'
const password = '123'

// 配置axios请求拦截,将token设置到请求头部中
axios.interceptors.request.use(async config => {
    // localstorage中获取token,判断token是否存在并且是否过期
    let token = localStorage.getItem('token')
    if(!token || Date.now() > localStorage.getItem('expires') * 1000 ){
//如果token过期则需要重新的登录,这里可以跳转到登录页面,这里的用户名和密码是写死的
        const {data:{code,data}} = await newAxios.post('/accesstoken',{username,password})
        if(code === 0){
            localStorage.setItem('token',data.token)
            localStorage.setItem('expires',data.expires)
            token = data.token
        }
    }
    config.headers.Authorization = `Bearer ${token}`
    return config
})

// 响应拦截
axios.interceptors.response.use( response => {
    return response.data
},error => {
    return Promise.reject(error)
})

vue3+typescript

vue这里的用户名和密码同样是写死的,可以跳转到登录页

import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
import Mock from 'mockjs'

// 将axios设置为全局属性
Vue.use(VueAxios,axios)
// 将Mock设置为全局属性
Vue.prototype.Mock = Mock

// 创建一个新的axios对象,用来请求token
const newAxios = axios.create({baseURL: '/v1'})
// 配置全局基础URL地址
axios.defaults.baseURL = '/v1'
// 配置全局的请求超时时间
axios.defaults.timeout = 3000
// 请求token账号
const username = 'jack'
const password = '123'

// 配置axios请求拦截,将token设置到请求头部中
axios.interceptors.request.use(async config => {
    // localstorage中获取token,判断token是否存在并且是否过期
    let token = localStorage.getItem('token')
    if(!token || Date.now() > localStorage.getItem('expires') * 1000 ){
        const {data:{code,data}} = await newAxios.post('/accesstoken',{username,password})
        if(code === 0){
            localStorage.setItem('token',data.token)
            localStorage.setItem('expires',data.expires)
            token = data.token
        }
    }
    config.headers.Authorization = `Bearer ${token}`
    return config
})

// 响应拦截
axios.interceptors.response.use( response => {
    return response.data
},error => {
    return Promise.reject(error)
})


vue3挂载全局

app.config.globalProperties.XXX = XXX

在组件的steup中使用

//获取this

import { getCurrentInstance } from 'vue';

const { proxy } = getCurrentInstance();

proxy.$http.get()

微信小程序

小程序中使用的是wx.request的异步promise并非axios

这里的用户名密码同样是写死的,可以跳转到登录页进行操作

微信账号登录可查看微信文档

// API接口URL地址
const baseUrl = 'http://127.0.0.1:8000/v1'
const ajax = (method,url,data) => {
   // 拼接请求的url
    url = baseUrl + url
    // 从本地存储中获取token
    const token = wx.getStorageSync('token')
    return new Promise((resolve,reject) => {
        // 判断是否存在或过期
        if (!token || Date.now() > wx.getStorageSync('expire') * 1000 ) {    
          // 过期请求token
          wx.request({
            url: baseUrl +  '/accesstoken',
            method: 'POST',
            data: {username:'jack',passowrd:123},
            success(res){
              const {code,data} = res.data
              if(code === 0 ){
                wx.setStorageSync('token', data.token)
                wx.setStorageSync('expire', data.expires)
                wx.request({
                  url, 
                  method,
                  data,
                  header: {
                    Authorization: 'Bearer ' + data.token 
                  },
                  success: res => {
                    resolve(res.data)
                  },
                  fail: error => {
                    reject(error)
                  }
                })
              }else{
                reject(res)
              }       
            }
          })
        }else{
          wx.request({
            url, 
            method,
            data,
            header: {
              Authorization: 'Bearer ' + token 
            },
            success: res => {
              resolve(res.data)
            },
            fail: error => {
              reject(error)
            }
          })
        }
    })
}

// 暴露模块
module.exports = ajax

react中和vue3相同

可以直接使用window.XX=XX挂载到window上全局使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值