From f15c8fa05e3e4eae8ef093ba6ba827ad74e38fec Mon Sep 17 00:00:00 2001 From: yangyin <1850366751@qq.com> Date: 星期二, 05 十一月 2024 10:32:27 +0800 Subject: [PATCH] 常用语联调接口 --- src/utils/request.ts | 64 +++++++++++++++++++++++++++++-- 1 files changed, 59 insertions(+), 5 deletions(-) diff --git a/src/utils/request.ts b/src/utils/request.ts index 18fb6d9..9d864a4 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,10 +1,11 @@ -import type { AxiosInstance, AxiosRequestConfig } from 'axios'; +import type { AxiosInstance, AxiosRequestConfig, CreateAxiosDefaults } from 'axios'; import axios from 'axios'; import { ElMessage } from 'element-plus'; import { NO_AUTH_API_LIST } from '../api/ai/chat'; import { LOGIN_URL, TEL_LOGIN_URL } from '../api/ai/user'; +import { Logger } from '../model/logger/Logger'; import emitter from './mitt'; -import { debounce } from './util'; +import { debounce, decodeFormData } from './util'; import { AUTH_URL, MAIN_URL, SECONDARY_URL } from '/@/constants'; import { Local, LoginInfo, Session } from '/@/utils/storage'; // import JSONbig from 'json-bigint'; @@ -93,8 +94,10 @@ } break; case ErrorCode.Exception: + const param = res.config.data ? `\n 璇锋眰鍙傛暟锛�${JSON.stringify(decodeFormData(res.config.data))}\n` : ''; ElMessage.error('鍐呴儴閿欒锛�'); - throw '鍐呴儴閿欒'; + Logger.error(`${res.config.url} 鍝嶅簲澶辫触${param}`, serveData?.json_msg && new Error(serveData?.json_msg)); + return res.data; } } return res.data; @@ -125,18 +128,69 @@ ); }; // 閰嶇疆鏂板缓涓�涓� axios 瀹炰緥 -const createAxiosInstance = () => { +const createAxiosInstance = (option: Partial<CreateAxiosDefaults<any>> = {}) => { return axios.create({ baseURL: MAIN_URL, - timeout: 50000, + timeout: 120000, headers: { 'Content-Type': 'application/json;charset=utf-8 ' }, + ...option, }); }; + const service = createAxiosInstance(); export const mainRequest = service; +//#region ====================== 娴佸搷搴旀暟鎹� ====================== +const streamInstance = createAxiosInstance({ + adapter: 'fetch', + responseType: 'stream', +}); +const decoder = new TextDecoder(); +const encoder = new TextEncoder(); +const readStream = async (stream: ReadableStream, cb: (value) => void): Promise<any> => { + const reader = stream.getReader(); + let lastValue = ''; + const p = new Promise(async (resolve, reject) => { + let fullValue = ''; + while (1) { + const { done, value } = await reader.read(); + if (done) { + break; + } + // const txt = decoder.decode(Uint8Array.from([...lastValue, ...value])); + const txt = decoder.decode(value); + const txtArr = txt.split('\n'); + txtArr[0] =lastValue+ txtArr[0] + txtArr.forEach((value, index, array) => { + // 涓�鑸笉浼氬嚭鐜拌繛缁崲琛岋紝鍙彲鑳芥渶鍚庝竴涓槸鎹㈣ + if (index === array.length - 1) { + lastValue =value; + + } else { + const decodeValue = decodeURIComponent(value); + fullValue += decodeValue; + cb(decodeValue); + } + }); + } + resolve(fullValue); + }); + return p; +}; + +export const streamReq = async (config: AxiosRequestConfig<any>, callback: (value) => void) => { + const response = await streamInstance(config); + const stream = response as unknown as ReadableStream; + return readStream(stream, (value) => { + const jsonValue = JSON.parse(value); + callback(jsonValue); + }); +}; +//#endregion + initRequestInterceptor(service); +initRequestInterceptor(streamInstance); export function secondaryRequest(config: AxiosRequestConfig<any>) { return service({ -- Gitblit v1.9.3