fix: 移除 url 末尾的斜线

pull/41/head
zjx0905 2023-04-07 08:47:54 +08:00
parent 222b935f68
commit 1c09ffdd91
4 changed files with 29 additions and 66 deletions

View File

@ -1,14 +1,16 @@
import { isPlainObject, isString } from '../helpers/isTypes';
import { AxiosRequestConfig, AxiosRequestData, AxiosResponse } from './Axios'; import { AxiosRequestConfig, AxiosRequestData, AxiosResponse } from './Axios';
import { mergeConfig } from './mergeConfig'; import { mergeConfig } from './mergeConfig';
export interface AxiosDomainAsRequest { export interface AxiosDomainRequest {
<TData = unknown>( <TData = unknown>(
/** /**
* *
*/ */
config?: AxiosRequestConfig, config: AxiosRequestConfig,
): Promise<AxiosResponse<TData>>; ): Promise<AxiosResponse<TData>>;
}
export interface AxiosDomainAsRequest {
<TData = unknown>( <TData = unknown>(
/** /**
* *
@ -22,16 +24,6 @@ export interface AxiosDomainAsRequest {
} }
export interface AxiosDomainAsRequestWithParams { export interface AxiosDomainAsRequestWithParams {
<TData = unknown>(
/**
*
*/
params?: AnyObject,
/**
*
*/
config?: AxiosRequestConfig,
): Promise<AxiosResponse<TData>>;
<TData = unknown>( <TData = unknown>(
/** /**
* *
@ -49,16 +41,6 @@ export interface AxiosDomainAsRequestWithParams {
} }
export interface AxiosDomainAsRequestWithData { export interface AxiosDomainAsRequestWithData {
<TData = unknown>(
/**
*
*/
data?: AnyObject,
/**
*
*/
config?: AxiosRequestConfig,
): Promise<AxiosResponse<TData>>;
<TData = unknown>( <TData = unknown>(
/** /**
* *
@ -75,10 +57,6 @@ export interface AxiosDomainAsRequestWithData {
): Promise<AxiosResponse<TData>>; ): Promise<AxiosResponse<TData>>;
} }
export interface AxiosDomainRequest {
<TData = unknown>(config: AxiosRequestConfig): Promise<AxiosResponse<TData>>;
}
export default class AxiosDomain { export default class AxiosDomain {
/** /**
* *
@ -162,14 +140,10 @@ export default class AxiosDomain {
#createAsRequests() { #createAsRequests() {
for (const alias of AxiosDomain.as) { for (const alias of AxiosDomain.as) {
this[alias] = function processAsRequest( this[alias] = function processAsRequest(
urlOrConfig?: string | AxiosRequestConfig, url: string,
config: AxiosRequestConfig = {}, config: AxiosRequestConfig = {},
) { ) {
if (isString(urlOrConfig)) { config.url = url;
config.url = urlOrConfig;
} else if (isPlainObject(urlOrConfig)) {
config = urlOrConfig;
}
config.method = alias; config.method = alias;
return this.request(config); return this.request(config);
@ -180,18 +154,13 @@ export default class AxiosDomain {
#createAspRequests() { #createAspRequests() {
for (const alias of AxiosDomain.asp) { for (const alias of AxiosDomain.asp) {
this[alias] = function processAspRequest( this[alias] = function processAspRequest(
urlOrParams?: string | AxiosRequestConfig, url: string,
paramsOrConfig: AxiosRequestConfig | AnyObject = {}, params: AnyObject = {},
config: AxiosRequestConfig = {}, config: AxiosRequestConfig = {},
) { ) {
if (isString(urlOrParams)) { config.url = url;
config.url = urlOrParams;
config.params = paramsOrConfig;
} else if (isPlainObject(urlOrParams)) {
config = paramsOrConfig;
config.params = urlOrParams;
}
config.method = alias; config.method = alias;
config.params = Object.assign(params, config.params);
return this.request(config); return this.request(config);
}; };
@ -201,18 +170,13 @@ export default class AxiosDomain {
#createAsdRequests() { #createAsdRequests() {
for (const alias of AxiosDomain.asd) { for (const alias of AxiosDomain.asd) {
this[alias] = function processAsdRequest( this[alias] = function processAsdRequest(
urlOrData?: string | AxiosRequestConfig, url: string,
dataOrConfig: AxiosRequestData | AxiosRequestConfig = {}, data: AxiosRequestData = {},
config: AxiosRequestConfig = {}, config: AxiosRequestConfig = {},
) { ) {
if (isString(urlOrData)) { config.url = url;
config.url = urlOrData;
config.data = dataOrConfig;
} else if (isPlainObject(urlOrData)) {
config = dataOrConfig;
config.data = urlOrData;
}
config.method = alias; config.method = alias;
config.data = Object.assign(data, config.data);
return this.request(config); return this.request(config);
}; };

View File

@ -1,4 +1,5 @@
const combineRE = /(^|[^:])\/{2,}/g; const combineRE = /(^|[^:])\/{2,}/g;
const removeRE = /\/$/;
export function combineURL(baseURL: string, url: string): string { export function combineURL(baseURL: string, url: string): string {
return url ? `${baseURL}/${url}`.replace(combineRE, '$1/') : baseURL; return `${baseURL}/${url}`.replace(combineRE, '$1/').replace(removeRE, '');
} }

View File

@ -72,25 +72,19 @@ describe('src/core/Axios.ts', () => {
a.request(c); a.request(c);
AxiosDomain.as.forEach((k) => a[k](c));
AxiosDomain.as.forEach((k) => a[k](c.url, ignore(c, 'url'))); AxiosDomain.as.forEach((k) => a[k](c.url, ignore(c, 'url')));
AxiosDomain.asp.forEach((k) => a[k](c.params, ignore(c, 'params')));
AxiosDomain.asp.forEach((k) => AxiosDomain.asp.forEach((k) =>
a[k](c.url, c.params, ignore(c, 'url', 'params')), a[k](c.url, c.params, ignore(c, 'url', 'params')),
); );
AxiosDomain.asd.forEach((k) => a[k](c.data, ignore(c, 'data')));
AxiosDomain.asd.forEach((k) => AxiosDomain.asd.forEach((k) =>
a[k](c.url, c.data, ignore(c, 'url', 'data')), a[k](c.url, c.data, ignore(c, 'url', 'data')),
); );
const t = const l =
(AxiosDomain.as.length + AxiosDomain.as.length +
AxiosDomain.asp.length + AxiosDomain.asp.length +
AxiosDomain.asd.length) * AxiosDomain.asd.length +
2 +
1; 1;
expect(cb.mock.calls.length).toBe(t); expect(cb.mock.calls.length).toBe(l);
}); });
}); });

View File

@ -17,10 +17,14 @@ describe('src/helpers/combineURL.ts', () => {
}); });
test('应该清理多余的斜线', () => { test('应该清理多余的斜线', () => {
expect(combineURL('//api//', 'test//')).toBe('/api/test/'); expect(combineURL('//api//', 'test//')).toBe('/api/test');
expect(combineURL('//api//', '//test//')).toBe('/api/test/'); expect(combineURL('//api//', '//test//')).toBe('/api/test');
expect(combineURL('////', '')).toBe('');
expect(combineURL('', '///')).toBe('');
expect(combineURL('http://api.com//', '')).toBe('http://api.com');
expect(combineURL('http://api.com/', '/')).toBe('http://api.com');
expect(combineURL('http://api.com//', '//test//')).toBe( expect(combineURL('http://api.com//', '//test//')).toBe(
'http://api.com/test/', 'http://api.com/test',
); );
}); });
}); });