ts封装axios
ts封装axios
·
/config/index.ts:
// 1.区分开发环境和生产环境
// export const BASE_URL = 'http://coderwhy.dev:8000'
// export const BASE_URL = 'http://codercba.prod:8000'
// 2.代码逻辑判断, 判断当前环境
// vite默认提供的环境变量
// console.log(import.meta.env.MODE)
// console.log(import.meta.env.DEV) // 是否开发环境
// console.log(import.meta.env.PROD) // 是否生产环境
// console.log(import.meta.env.SSR) // 是否是服务器端渲染(server side render)
let BASE_URL = ''
if (import.meta.env.PROD) {
// 生产环境
BASE_URL = 'http://codercba.com:5000'
} else {
// 开发环境
BASE_URL = '自己的url'
}
// console.log(BASE_URL)
// 3.通过创建.env文件直接创建变量
// console.log(import.meta.env.VITE_URL)
export const TIME_OUT = 10000
export { BASE_URL }
service/request/type.ts
import type {
AxiosRequestConfig,
AxiosResponse,
InternalAxiosRequestConfig
} from 'axios'
// 针对AxiosRequestConfig配置进行扩展
export interface HYInterceptors {
requestSuccessFn?: (
config: InternalAxiosRequestConfig
) => InternalAxiosRequestConfig
requestFailureFn?: (err: any) => any
responseSuccessFn?: (res: AxiosResponse) => AxiosResponse
responseFailureFn?: (err: any) => any
}
export interface HYRequestConfig extends AxiosRequestConfig {
interceptors?: HYInterceptors
}
service/request/index.ts
import axios from 'axios'
import type { AxiosInstance, AxiosRequestConfig } from 'axios'
import type { HYRequestConfig, HYInterceptors } from './type'
class HYRequest {
instance: AxiosInstance
interceptors?: HYInterceptors
constructor(config: HYRequestConfig) {
this.instance = axios.create(config)
this.interceptors = config.interceptors
// 针对特定的hyRequest实例添加拦截器
this.instance.interceptors.request.use(
config.interceptors?.requestSuccessFn,
config.interceptors?.requestFailureFn
)
this.instance.interceptors.response.use(
config.interceptors?.responseSuccessFn,
config.interceptors?.responseFailureFn
)
// 全局拦截器
this.instance.interceptors.request.use(
(config) => {
// loading/token
console.log('请求拦截成功')
return config
},
(err) => {
return err
}
)
this.instance.interceptors.response.use(
(res) => {
console.log('响应拦截成功')
return res.data
},
(err) => {
return err
}
)
}
// 封装网络请求的方法
request<T>(config: AxiosRequestConfig): Promise<T> {
// 返回Promise
return new Promise((resolve, reject) => {
this.instance
.request<any, T>(config)
.then(
(res) => {
console.log(res)
resolve(res)
return res
},
(err) => {
return err
}
)
.catch((err) => {
reject(err)
return err
})
})
}
get<T>(config: AxiosRequestConfig): Promise<T> {
return this.request({ ...config, method: 'GET' })
}
post<T>(config: AxiosRequestConfig): Promise<T> {
return this.request({ ...config, method: 'POST' })
}
delete<T>(config: AxiosRequestConfig): Promise<T> {
return this.request({ ...config, method: 'DELETE' })
}
patch<T>(config: AxiosRequestConfig): Promise<T> {
return this.request({ ...config, method: 'PATCH' })
}
}
export default HYRequest
service/index.ts
import { BASE_URL, TIME_OUT } from './config'
import HYRequest from './request'
const hyRequest = new HYRequest({
baseURL: BASE_URL,
timeout: TIME_OUT
})
export default hyRequest
登录login使用:
import hyRequest from '..'
import type { IAccount } from '@/types'
export function accountLoginRequest(account: IAccount) {
return hyRequest.post({
url: '/login',
data: account
})
}
更多推荐
所有评论(0)