refactor(request): unify response transformation methods and deprecate transformBackendResponse

This commit is contained in:
Soybean 2025-07-19 12:04:00 +08:00
parent 936b834e62
commit f83eefbc3e
4 changed files with 20 additions and 5 deletions

View File

@ -116,7 +116,7 @@ export function createRequest<ResponseData, ApiData, State extends Record<string
const responseType = response.config?.responseType || 'json';
if (responseType === 'json') {
return opts.transformBackendResponse(response);
return opts.transform(response);
}
return response.data as MappedType<R, T>;
@ -152,7 +152,7 @@ export function createFlatRequest<ResponseData, ApiData, State extends Record<st
const responseType = response.config?.responseType || 'json';
if (responseType === 'json') {
const data = await opts.transformBackendResponse(response);
const data = await opts.transform(response);
return { data, error: null, response };
}

View File

@ -10,13 +10,21 @@ export function createDefaultOptions<
State extends Record<string, unknown> = Record<string, unknown>
>(options?: Partial<RequestOption<ResponseData, ApiData, State>>) {
const opts: RequestOption<ResponseData, ApiData, State> = {
defaultState: {} as State,
transform: async response => response.data as unknown as ApiData,
transformBackendResponse: async response => response.data as unknown as ApiData,
onRequest: async config => config,
isBackendSuccess: _response => true,
onBackendFail: async () => {},
transformBackendResponse: async response => response.data as unknown as ApiData,
onError: async () => {}
};
if (options?.transform) {
opts.transform = options.transform;
} else {
opts.transform = options?.transformBackendResponse || opts.transform;
}
Object.assign(opts, options);
return opts;

View File

@ -24,6 +24,13 @@ export interface RequestOption<
*
* @param response Axios response
*/
transform: ResponseTransform<AxiosResponse<ResponseData>, ApiData>;
/**
* transform the response data to the api data
*
* @deprecated use `transform` instead, will be removed in the next major version v3
* @param response Axios response
*/
transformBackendResponse: ResponseTransform<AxiosResponse<ResponseData>, ApiData>;
/**
* The hook before request

View File

@ -22,7 +22,7 @@ export const request = createFlatRequest(
errMsgStack: [],
refreshTokenPromise: null
} as RequestInstanceState,
transformBackendResponse(response: AxiosResponse<App.Service.Response<any>>) {
transform(response: AxiosResponse<App.Service.Response<any>>) {
return response.data.data;
},
async onRequest(config) {
@ -132,7 +132,7 @@ export const demoRequest = createRequest(
baseURL: otherBaseURL.demo
},
{
transformBackendResponse(response: AxiosResponse<App.Service.DemoResponse>) {
transform(response: AxiosResponse<App.Service.DemoResponse>) {
return response.data.result;
},
async onRequest(config) {