liveh5-nuxt/app/api/http.js
xingyy 4ab0a5ca81 refactor(api): 重构 HTTP模块并优化错误处理
- 将 http.ts 重命名为 http.js
- 添加全局错误处理逻辑
- 更新 API 调用和错误处理方式
- 优化登录页面的验证码发送逻辑
- 调整消息组件的显示位置
2025-01-16 16:18:38 +08:00

60 lines
1.4 KiB
JavaScript

import { useRuntimeConfig } from '#app'
import { ofetch } from 'ofetch'
import {message} from '@/components/x-message/useMessage.js'
let httpStatusErrorHandler
let http
export function setupHttp() {
if (http)
return http
const config = useRuntimeConfig()
const baseURL = config.public.NUXT_PUBLIC_API_BASE
http = ofetch.create({
baseURL,
headers: { 'Content-Type': 'application/json' },
async onRequest({ options }) {
const token = localStorage.getItem('token')
options.headers = {
...options.headers,
...(token && { Authorization: token }),
}
},
async onResponse({ response }) {
if (response._data.status===1){
message.warning(response._data.msg)
}
},
async onResponseError({ response }) {
console.log('error错误')
const { message } = response._data
if (Array.isArray(message)) {
message.forEach((item) => {
httpStatusErrorHandler?.(item, response.status)
})
}
else {
httpStatusErrorHandler?.(message, response.status)
}
return Promise.reject(response._data)
},
retry: 3,
retryDelay: 1000,
})
}
export function injectHttpStatusErrorHandler(handler) {
httpStatusErrorHandler = handler
}
export function getHttp() {
if (!http) {
throw new Error('HTTP client not initialized. Call setupHttp first.')
}
return http
}