diff --git a/src/sdk/sdk-server.ts b/src/sdk/sdk-server.ts index d39b5a9..0577b61 100644 --- a/src/sdk/sdk-server.ts +++ b/src/sdk/sdk-server.ts @@ -60,17 +60,49 @@ export class SdkServer { private async request( url: string, method: 'GET' | 'POST' = 'GET', - data?: any + data?: any, + retryCount: number = 0 ): Promise> { + const maxRetries = 3; + const retryDelay = 1000 * (retryCount + 1); // 递增延迟 + try { - const response = await Taro.request({ + console.log(`SDK Server request: ${method} ${this.baseUrl}${url}`, { data, retryCount }); + + const requestConfig: any = { url: `${this.baseUrl}${url}`, method, - data, timeout: this.timeout, header: { 'Content-Type': 'application/json', + 'Accept': 'application/json', + // 强制使用HTTP/1.1避免HTTP/2问题 + 'Connection': 'keep-alive', }, + // 禁用HTTP/2 + enableHttp2: false, + // 启用缓存 + enableCache: false, + }; + + // 根据请求方法设置数据 + if (method === 'GET') { + // GET请求使用query参数 + if (data) { + const params = new URLSearchParams(data).toString(); + requestConfig.url += `?${params}`; + } + } else { + // POST请求使用body + requestConfig.data = data; + } + + const response = await Taro.request(requestConfig); + + console.log(`SDK Server response:`, { + statusCode: response.statusCode, + data: response.data, + header: response.header }); if (response.statusCode === 200) { @@ -85,9 +117,33 @@ export class SdkServer { } else { throw new Error(`HTTP ${response.statusCode}: ${response.data?.msg || 'Request failed'}`); } - } catch (error) { - console.error('SDK Server request error:', error); - throw error; + } catch (error: any) { + console.error('SDK Server request error:', { + url: `${this.baseUrl}${url}`, + method, + data, + retryCount, + error: error.message || error + }); + + // 检查是否是网络错误且可以重试 + const isNetworkError = error.message?.includes('stream has been early terminated') || + error.message?.includes('timeout') || + error.message?.includes('network') || + error.errMsg?.includes('request:fail'); + + if (isNetworkError && retryCount < maxRetries) { + console.log(`Retrying request in ${retryDelay}ms... (${retryCount + 1}/${maxRetries})`); + + // 等待后重试 + await new Promise(resolve => setTimeout(resolve, retryDelay)); + + return this.request(url, method, data, retryCount + 1); + } + + // 包装错误信息 + const errorMessage = error.message || error.errMsg || 'Unknown network error'; + throw new Error(`网络请求失败: ${errorMessage}`); } }