UNPKG

whalecloud-dxp-api-react-native

Version:

This section explains how to use the SDK and illustrates it with an example: - This chapter is essential to learn - For specific business development, see [Bussiness Scenario](https://www.digchan.info/en-US/dxp/user-sso/sign-up) - The Business Scenario pr

110 lines (97 loc) 3.06 kB
import fs from 'fs'; import path from 'path'; import * as dxp from './src/api'; // 直接导入 TypeScript 文件 const outputFilePath = path.join(process.cwd(), 'index.ts'); // 生成导入和基础配置代码 let outputCode = `import 'react-native-url-polyfill/auto'; import axios, { AxiosInstance, AxiosResponse, InternalAxiosRequestConfig } from 'axios'; import { Configuration } from './src/index'; import * as dxp from './src/api'; // 创建 Axios 实例 const axiosInstance: AxiosInstance = axios.create(); // 动态 headers 的存储 let dynamicHeaders: Record<string, string> = {}; // 动态打开log 输出 let openConfigLog: boolean = false; // 动态打开log 输出 let accessToken: string = ''; export const setDXPRequestHeaders = (headers: Record<string, string>): void => { dynamicHeaders = headers; }; export const setDXPConfigLog = (configLog: boolean): void => { openConfigLog = configLog; }; const getDXPAccessToken = () => { return accessToken }; // 添加请求拦截器 axiosInstance.interceptors.request.use( (config: InternalAxiosRequestConfig): InternalAxiosRequestConfig => { // 在发送请求之前将动态属性添加到请求头 config.headers = { ...config.headers, ...dynamicHeaders, } as any; if (openConfigLog) { console.log('===================================='); console.log('config info', config); console.log('===================================='); } return config; }, (error: any): Promise<any> => { return Promise.reject(error); } ); // 添加响应拦截器 axiosInstance.interceptors.response.use( (response: AxiosResponse): AxiosResponse => { if(response.data.token){ accessToken = response.data.token } return response; }, (error: any): any => { return { code: error?.code || '', message: error?.message || '', data: error?.response?.data || '', status: error?.response?.status || 404, responseURL: error?.response?.request?.responseURL || '', }; } ); // 创建配置对象 export const configuration = new Configuration({ basePath: '', // 替换为您的 API 基础 URL baseOptions: { axiosInstance, }, }); // 使用泛型来定义 createApiInstance 的返回类型 const createApiInstance = <T>(ApiClass: new (config: Configuration) => T): T => { const apiInstance = new ApiClass(configuration); (apiInstance as any).axios = axiosInstance; // 将 axiosInstance 直接赋值给 API 实例 return apiInstance; }; // 创建 API 实例对象 export const DXPApi = {`; // 遍历 dxp 对象,生成 API 导出代码 Object.keys(dxp).forEach(key => { if (key.endsWith('Api')) { outputCode += ` ${key}: createApiInstance(dxp.${key}),`; } }); // 关闭对象和导出 axiosInstance outputCode += ` axiosInstance, setDXPRequestHeaders, setDXPConfigLog, configuration, getDXPAccessToken }; `; // 将生成的代码写入文件 fs.writeFileSync(outputFilePath, outputCode, 'utf8'); console.log(`API 文件已生成: ${outputFilePath}`);