返回 AiToEarn
index.ts
1 import { net } from 'electron';
2 import { getUserToken } from '../user/comment';
3
4 export interface IRequestNetResult<T> {
5 status: number;
6 headers: Record<any, any>;
7 data: T;
8 }
9
10 export interface IRequestNetParams {
11 headers?: any;
12 url: string;
13 body?: any;
14 method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
15 isFile?: boolean;
16 isToken?: boolean;
17 }
18
19 const netRequest = <T = any>({
20 headers,
21 body,
22 method,
23 url,
24 isFile,
25 isToken,
26 }: IRequestNetParams): Promise<IRequestNetResult<T>> => {
27 return new Promise((resolve, reject) => {
28 const req = net.request({
29 method: method || 'GET',
30 url: `${process.env.VITE_APP_URL}/${url}`,
31 });
32
33 // 设置请求头
34 if (headers) {
35 Object.entries(headers).forEach(([key, value]) => {
36 // @ts-ignore
37 req.setHeader(key, value);
38 });
39 }
40
41 if (isToken) req.setHeader('Authorization', `Bearer ${getUserToken()}`);
42
43 // 处理响应
44 req.on('response', (response) => {
45 let data = '';
46 response.on('data', (chunk) => {
47 data += chunk;
48 });
49
50 response.on('end', () => {
51 let parsedData: T;
52 try {
53 parsedData = JSON.parse(data);
54 } catch (e) {
55 parsedData = undefined as any;
56 console.log(e);
57 }
58 resolve({
59 status: response.statusCode,
60 headers: response.headers,
61 data: parsedData,
62 });
63 });
64 });
65
66 // 错误处理
67 req.on('error', (error) => {
68 reject(error);
69 });
70
71 if (isFile) {
72 req.setHeader('Content-Type', 'application/octet-stream');
73 req.write(body);
74 } else {
75 // 发送请求体
76 if (body) {
77 req.setHeader('Content-Type', 'application/json');
78 req.write(typeof body === 'string' ? body : JSON.stringify(body));
79 }
80 }
81
82 req.end();
83 });
84 };
85
86 export default netRequest;
87
87 lines TYPESCRIPT