This commit is contained in:
2026-08-06 18:02:02 +08:00
parent 9aa79bef6d
commit 20f8a436e0
6 changed files with 69 additions and 31 deletions
+7 -4
View File
@@ -1,7 +1,8 @@
import axios, { AxiosError, type AxiosRequestConfig, type InternalAxiosRequestConfig } from 'axios'
import { parseApiJsonResponse } from '@chongchong/shared'
import { clearSessionTokens, getAccessToken, getRefreshToken, persistTokenPair, type TokenPair } from '@/api/session'
import { ApiError, asFieldErrors, isApiEnvelope, type ApiEnvelope } from '@/api/types'
import { apiErrorMessage, asFieldErrors } from '@/api/errorDetails'
import { ApiError, isApiEnvelope, type ApiEnvelope } from '@/api/types'
const transport = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL || '/api',
@@ -15,7 +16,8 @@ interface RetryableRequest extends InternalAxiosRequestConfig {
function unwrap<T>(envelope: ApiEnvelope<T>) {
if (envelope.code !== '200') {
throw new ApiError(envelope.message || '请求失败', envelope.code, undefined, asFieldErrors(envelope.data), envelope.traceId)
const fieldErrors = asFieldErrors(envelope.data)
throw new ApiError(apiErrorMessage(envelope.message, fieldErrors), envelope.code, undefined, fieldErrors, envelope.traceId)
}
return envelope.data
}
@@ -26,11 +28,12 @@ function mapError(error: unknown) {
const body = error.response?.data
if (isApiEnvelope(body)) {
const fieldErrors = asFieldErrors(body.data)
return new ApiError(
body.message || '请求失败',
apiErrorMessage(body.message, fieldErrors),
body.code,
error.response?.status,
asFieldErrors(body.data),
fieldErrors,
typeof body.traceId === 'string' ? body.traceId : null,
)
}