IntelliClass_FE/utils/http.ts

42 lines
910 B
TypeScript

import type { NitroFetchOptions, NitroFetchRequest } from 'nitropack'
import { FetchError } from 'ofetch'
/**
* 封装 HTTP 请求
* @param url 请求的路径
* @param options 请求选项
* @returns 返回请求结果
*
* @throws {FetchError} 请求失败时抛出错误
*/
export const http = async <T>(
url: string,
options?: NitroFetchOptions<NitroFetchRequest>,
) => {
const loginState = useLoginState()
const runtimeConfig = useRuntimeConfig()
const baseURL = runtimeConfig.public.baseURL as string
try {
const data = await $fetch<T>(url, {
baseURL,
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${loginState.token}`,
},
...options,
})
return data
}
catch (err: unknown) {
if (err instanceof FetchError) {
throw err
}
else {
throw new FetchError('请求失败')
}
}
}