feat(api): 添加多路由代理处理实现
- 新增api目录下多个接口路径代理处理文件,支持动态拼接目标URL - 根据环境变量选择不同的后端服务地址(如dev和生产环境) - 统一添加TenantId和Authorization请求头传递租户及身份信息 - 实现请求参数及搜索参数的完整转发 - 引入better-sqlite3及node内建模块支持服务端功能 - 新增专家详情页面,实现文章、成果及预约咨询功能展示 - 页面实现加载骨架屏、标签页切换及空状态提示优化体验
This commit is contained in:
70
.output/server/chunks/build/request-BIxQh2im.mjs
Normal file
70
.output/server/chunks/build/request-BIxQh2im.mjs
Normal file
@@ -0,0 +1,70 @@
|
||||
import { f as useRequestFetch, M as MODULES_API_URL, g as useRuntimeConfig, S as SERVER_API_URL, A as APP_API_URL } from './server.mjs';
|
||||
|
||||
function getTenantId(defaultTenantId = "5") {
|
||||
return defaultTenantId;
|
||||
}
|
||||
function getFetch() {
|
||||
try {
|
||||
return useRequestFetch();
|
||||
} catch {
|
||||
return globalThis.$fetch;
|
||||
}
|
||||
}
|
||||
function normalizeUrl(url) {
|
||||
const config = useRuntimeConfig();
|
||||
const serverBase = config.public.serverApiBase;
|
||||
const modulesBase = config.public.modulesApiBase;
|
||||
const appBase = config.public.appApiBase;
|
||||
if (url.startsWith(serverBase)) {
|
||||
return SERVER_API_URL + url.slice(serverBase.length);
|
||||
}
|
||||
if (url.startsWith(modulesBase)) {
|
||||
return MODULES_API_URL + url.slice(modulesBase.length);
|
||||
}
|
||||
if (url.startsWith(appBase)) {
|
||||
return APP_API_URL + url.slice(appBase.length);
|
||||
}
|
||||
return url;
|
||||
}
|
||||
function mergeHeaders(headers) {
|
||||
const config = useRuntimeConfig();
|
||||
const tenantId = headers?.TenantId ?? headers?.tenantId ?? getTenantId(String(config.public.tenantId));
|
||||
const merged = {
|
||||
TenantId: String(tenantId)
|
||||
};
|
||||
if (headers) {
|
||||
for (const [key, value] of Object.entries(headers)) {
|
||||
if (value === void 0 || value === null) continue;
|
||||
merged[key] = String(value);
|
||||
}
|
||||
}
|
||||
return merged;
|
||||
}
|
||||
function withDefaultModuleBase(url) {
|
||||
if (url.startsWith("http://") || url.startsWith("https://")) return url;
|
||||
if (url.startsWith("/api/_server") || url.startsWith("/api/_modules") || url.startsWith("/api/_file")) return url;
|
||||
if (url.startsWith("/api/app")) return "/api/_app" + url.slice("/api/app".length);
|
||||
if (!url.startsWith("/")) return MODULES_API_URL + "/" + url;
|
||||
return MODULES_API_URL + url;
|
||||
}
|
||||
async function request(method, url, body, config = {}) {
|
||||
const $fetch = getFetch();
|
||||
const normalized = withDefaultModuleBase(normalizeUrl(url));
|
||||
const data = await $fetch(normalized, {
|
||||
method,
|
||||
query: config.params,
|
||||
body: body ?? config.data,
|
||||
headers: mergeHeaders(config.headers),
|
||||
responseType: config.responseType
|
||||
});
|
||||
return { data };
|
||||
}
|
||||
const requestClient = {
|
||||
get: (url, config) => request("GET", url, void 0, config),
|
||||
delete: (url, config) => request("DELETE", url, void 0, config),
|
||||
post: (url, data, config) => request("POST", url, data, config),
|
||||
put: (url, data, config) => request("PUT", url, data, config)
|
||||
};
|
||||
|
||||
export { requestClient as r };
|
||||
//# sourceMappingURL=request-BIxQh2im.mjs.map
|
||||
Reference in New Issue
Block a user