1- import axios from 'axios' ;
1+ import axios , { AxiosRequestConfig } from 'axios' ;
22
33export interface RestInfo {
44 url : string ,
@@ -14,10 +14,18 @@ axios.defaults.timeout = 100000;
1414
1515const multipartFormDataHeader = { 'Content-type' : 'multipart/form-data' } ;
1616const applicationJsonDataHeader = { 'Content-type' : 'application/json' }
17+ const formUrlEncodedHeader = { 'Content-type' : 'application/x-www-form-urlencoded' }
1718
1819function paramsSerializer ( params : any ) : string {
19- let entries = Object . entries ( params || { } ) . flatMap ( ( [ k , v ] ) =>
20- Array . isArray ( v ) ? v . map ( t => [ k , t ] ) : [ [ k , v ] ]
20+ let entries = Object . entries ( params || { } ) . flatMap ( ( [ k , v ] ) => {
21+ if ( Array . isArray ( v ) ) {
22+ return v . map ( t => [ k , t ] ) ;
23+ } else if ( v instanceof Object ) {
24+ return Object . entries ( v ) ;
25+ } else {
26+ return [ [ k , v ] ] ;
27+ }
28+ }
2129 ) ;
2230 let segments = entries . map ( p => `${ p [ 0 ] } =${ encodeURIComponent ( p [ 1 ] ?? '' ) } ` ) ;
2331 return segments . join ( '&' ) ;
@@ -26,27 +34,55 @@ function buildFormData(forms: any) {
2634 let formData = new FormData ( ) ;
2735 Object . entries ( forms ) . forEach ( ( [ k , v ] ) => {
2836 if ( v instanceof Blob ) {
29-
37+ formData . append ( k , v ) ;
3038 } else {
31-
39+ formData . append ( k , String ( v ) ) ;
3240 }
3341 } ) ;
3442 return formData ;
3543}
3644
3745export async function send < T > ( req : RestInfo ) : Promise < T > {
38- let reqInfo = {
46+ let reqInfo = req . forms ? (
47+ req . method . toLowerCase ( ) === "get" ? buildUrlEncodedFormRequest ( req )
48+ : buildMultipartFormDataFormRequest ( req ) )
49+ : buildCommonRequest ( req ) ;
50+ const res = await axios . request ( reqInfo ) ;
51+ return res . data ;
52+ }
53+ function buildUrlEncodedFormRequest ( req : RestInfo ) : AxiosRequestConfig < any > {
54+ return {
55+ url : req . url ,
56+ method : req . method ,
57+ headers : { ...formUrlEncodedHeader , ...req . headers } ,
58+ params : { ...req . params , ...req . forms } ,
59+ paramsSerializer : {
60+ serialize : paramsSerializer
61+ }
62+ }
63+ }
64+ function buildMultipartFormDataFormRequest ( req : RestInfo ) : AxiosRequestConfig < any > {
65+ return {
3966 url : req . url ,
4067 method : req . method ,
41- headers : req . forms ? { ...multipartFormDataHeader , ... req . headers } : { ... applicationJsonDataHeader , ...req . headers } ,
68+ headers : { ...multipartFormDataHeader , ...req . headers } ,
4269 params : req . params ,
43- data : req . forms ? req . forms : req . body ,
44-
70+ data : req . forms ,
4571 paramsSerializer : {
4672 serialize : paramsSerializer
47- } ,
48-
73+ }
4974 }
50- const res = await axios . request ( reqInfo ) ;
51- return res . data ;
5275}
76+ function buildCommonRequest ( req : RestInfo ) : AxiosRequestConfig < any > {
77+ return {
78+ url : req . url ,
79+ method : req . method ,
80+ headers : { ...applicationJsonDataHeader , ...req . headers } ,
81+ params : req . params ,
82+ data : req . body ,
83+ paramsSerializer : {
84+ serialize : paramsSerializer
85+ } ,
86+ } ;
87+ }
88+
0 commit comments