封装(/utils/useHttpFetch.ts)
import {callWithNuxt} from "#app";
interface myFetchOptions {
headers?: Record<string, string>,
[key: string]: any
}
export const useHttpFetch = (url: string, opt: myFetchOptions = {}) => {
const runtimeConfig = useRuntimeConfig()
const token = useCookie('accessToken')
const headers = {
...opt.headers,
...(token.value ? {'Authorization': token.value} : {})
}
opt.headers = headers
const nuxtApp = useNuxtApp()
return useFetch(url, {
...opt,
baseURL: runtimeConfig.public.BASE_URL,
onRequest({ request, options }) {
console.log('onRequest')
},
onRequestError({ request, options, error }) {
console.log('onRequestError')
},
onResponse({ request, response, options }) {
console.log('onResponse')
},
async onResponseError({ request, response, options }) {
console.log('onResponseError')
if (response.status === 401) {
alert('401')
await callWithNuxt(nuxtApp,navigateTo,[
"/sign_in",
{replace:true,redirectCode:401}
])
} else if (response.status === 500) {
alert('服务器发生错误')
}
}
})
}
暴露api(/composables/api/***.ts)
import { useHttpFetch } from '@/utils/useHttpFetch'
export const getmodels = (opt: any) => {
return useHttpFetch(`/api/getmodels`, opt)
}
使用
const getModels = () => {
return getmodels({
query: {
page: page.value,
pageSize: 10,
period: 0,
sort: 0,
uid: 'f75b428e0cfdb12fc02e632e98528faf'
}
})
}
const { data: listResult } = await getModels()