-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
你在什么情况下,需要这个功能解决什么问题?
我这边都是electron主进程去请求后台, 渲染进程 是否可以通过 适配器 向electron通信, 我想保留alovajs的所有功能跟electron通信 还不去直接请求后台
你期望的 API 是什么样子的?
import { ipcRenderer } from "electron";
import type { ProgressUpdater } from "alova";
type ElectronResponse = {
code: number;
msg: string;
response: Response | null;
};
interface FetchResponse<T = unknown> {
status: number;
statusText: string;
data: T;
headers: Record<string, string>;
}
/**
* Alova Electron 适配器
*
* 前端职责:参数格式化 + IPC 转发 + 响应解析
*/
export const electronFetchAdapter: FetchResponse = async (
url: string, // 接口路径(如 "/api/user/list")
request: RequestInit // Alova 传入的请求数据
): Promise<ElectronResponse> => {
// 1. 格式化请求参数(对齐 fetch API 格式,主进程可直接使用)
const fetchParams = {
method: request.method.toUpperCase(), // GET/POST/PUT/DELETE
url,
headers: {
"Content-Type": "application/json; charset=UTF-8", // 默认 JSON 格式
...request.headers // 覆盖用户自定义请求头
},
// 处理请求体:GET/HEAD 无 body,其他方法序列化数据
body: ["GET", "HEAD"].includes(request.method)
? undefined
: JSON.stringify(request.body)
};
let downloadHandler: ProgressUpdater = () => {},
uploadHandler: ProgressUpdater = () => {};
// 2. IPC 转发给主进程,等待 主进程 响应
const mainProcessResponse = ipcRenderer.invoke(url, fetchParams);
// 3. 转换为主进程响应为 Alova 可识别的格式
return {
response: () => mainProcessResponse,
headers: () => mainProcessResponse.then(res => res.headers),
onDownload: handler => {
downloadHandler = handler;
},
onUpload: handler => {
uploadHandler = handler;
}
};
};
export default electronFetchAdapter;
不知道我的这个想法是否可以实现?
Metadata
Metadata
Assignees
Labels
No labels