33 * @author atom-yang
44 */
55import { stringify } from 'query-string' ;
6- import NodeFetch , { Headers } from 'node-fetch' ;
6+ import NodeFetch , { Headers as NodeHeaders } from 'node-fetch' ;
77import { XMLHttpRequest as XHR } from 'xmlhttprequest' ;
88
99const defaultHeaders = {
@@ -14,12 +14,14 @@ const defaultHeaders = {
1414let RequestLibrary = { } ;
1515let RequestLibraryXMLOnly = null ;
1616let isFetch = false ;
17+ let HeadersClass = null ;
1718if ( process . env . RUNTIME_ENV === 'browser' ) {
1819 // For browsers use DOM Api XMLHttpRequest
1920 // serviceworker without window and document, only with self
2021 // eslint-disable-next-line no-restricted-globals
2122 const _self = typeof self === 'object' ? self : { } ;
2223 const _window = typeof window === 'object' ? window : _self ;
24+ HeadersClass = _window . Headers || null ;
2325 if ( typeof _window . XMLHttpRequest !== 'undefined' ) {
2426 RequestLibrary = _window . XMLHttpRequest ;
2527 isFetch = false ;
@@ -31,6 +33,7 @@ if (process.env.RUNTIME_ENV === 'browser') {
3133 // For node use xmlhttprequest
3234 RequestLibraryXMLOnly = XHR ;
3335 RequestLibrary = NodeFetch ;
36+ HeadersClass = NodeHeaders ;
3437 isFetch = true ;
3538}
3639
@@ -104,7 +107,7 @@ export default class HttpProvider {
104107 const { url, method = 'POST' , params = { } , signal } = requestConfig ;
105108 const path = `/api/${ url } ` . replace ( / \/ \/ / g, '/' ) ;
106109 let uri = `${ this . host } ${ path } ` . replace ( ) ;
107- const myHeaders = new Headers ( ) ;
110+ const myHeaders = HeadersClass ? new HeadersClass ( ) : { } ;
108111 let body = JSON . stringify ( params ) ;
109112 if ( method . toUpperCase ( ) === 'GET' || method . toUpperCase ( ) === 'DELETE' ) {
110113 uri = Object . keys ( params ) . length > 0 ? `${ uri } ?${ stringify ( params ) } ` : uri ;
0 commit comments