TS封装axios

314 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

为什么要封装axios

在我们项目中,经常需要进行网络请求,而axios为我们封装好了ajax,我们可以拿来直接使用,但是呢,这样就会出现一个问题,如果有一天axios不在维护了,那我们的项目每个界面都用到axios,那需要修改到什么时候,所以为了防止出现这样的问题,我们就把axios进行二次封装,如果真有那么一天,我们只需要修改我们自己封装的库就可以了

大佬有没有需要初级前端的,看看我

如何封装

axios主要用来发送ajax请求

  • 首先要区分此时的环境,不同的环境请求不同的地址
  • 发送axios需要传入配置,最基本的有url,methods
  • axios提供create方法,传入config配置,就可以发送请求
  • 我们封装一个类SCCRequest,定义一个instance,把创建好的axios传给instance,让后对他进行封装
import axios from 'axios'
import type { AxiosInstance, AxiosRequestConfig } from 'axios'
class SCCRequest {
  instance: AxiosInstance
  constructor(config: AxiosRequestConfig) {
    this.instance = axios.create(config)
  }
  request(config: AxiosRequestConfig): void {
    this.instance.request(config).then((res) => {
      console.log(res)
    })
  }
}
export default SCCRequest

定义一个request方法,然后把传过来的配置给他,让他发送ajax请求

因为是TS所以我们在axios的ts文件中拿到了他的类型

我们是在vue项目中的,最好配置一下不同环境变量对应的url

这个我们上一篇配置vue项目的环境已经说明白了,这这里直接使用,就不多说了

let BASE_URL = ''
const TIME_OUT = 10000
if (process.env.NODE_ENV === 'development') {
  BASE_URL = 'http://123.207.32.32:8000/'
} else if (process.env.NODE_ENV === 'production') {
  BASE_URL = 'http://123.207.32.32:8000/'
} else if (process.env.NODE_ENV === 'test') {
  BASE_URL = 'http://123.207.32.32:8000/'
}
export { BASE_URL, TIME_OUT }

我们在需要这个环境的地方导出他,并且实例化SCCRequest,也导出

import SCCRequest from './request'
import { BASE_URL, TIME_OUT } from './request/config'
const sccRequest = new SCCRequest({
  baseURL: BASE_URL,
  timeout: TIME_OUT
})
export default sccRequest

此时我们只需要引用这个文件的sccRequest中的request方法就可以发送请求了

发送请求

引入sccRequest,并且传入url和methods

import sccRequest from './service/axios_demo'
sccRequest.request({
  url: '/home/multidata',
  method: 'GET'
})

页面展示

request.png

我们可以看到已经请求成功了,明天接着封装,今天偷偷懒

结束

爱你们