- Add environment configs for dev/staging/prod environments - Implement centralized axios request utility with standardized error handling - Add shared TypeScript types for API responses and requests - Create comprehensive API client modules for all core endpoints - Configure vue router with all application page routes - Add icon fonts, static assets, and loading animations - Set up project documentation and collaboration guidelines - Remove deprecated uni-app bridge component files
2.7 KiB
2.7 KiB
统一请求库使用说明
统一请求库实现位置:
src/utils/request.ts- 类型定义:
src/shared/request-types.ts
环境变量
必须配置:
VITE_API_BASE_URL:接口基础地址(例如https://api.example.com)
可选配置:
VITE_API_TIMEOUT_MS:请求超时毫秒数(默认 15000)
上下文注入(header 来源)
请求库会在请求时自动注入以下 header(有值才注入):
Authorization: Bearer <token>(可通过skipAuth: true跳过)clientIdX-LatitudeX-Longitudelanguage
你需要在业务合适时机写入上下文(内存态):
import {
setAuthToken,
setClientId,
setLocation,
setLanguage,
} from "@/utils/request";
setClientId("your-client-id");
setAuthToken("token-string");
setLocation(30.12345, 120.12345);
setLanguage("zh-CN");
说明:
language如果未显式设置,会尝试从 i18n 的getCurrentLocale()获取
发起请求
request(兼容旧代码风格,返回 { code, message, data })
import { request } from "@/utils/request";
const res = await request<{ records: unknown[] }>({
method: "GET",
url: "/xxx/list",
params: { pageNum: 1, pageSize: 10 },
});
console.log(res.data.records);
requestData(推荐新代码风格,只返回 data)
import { requestData } from "@/utils/request";
const data = await requestData<{ records: unknown[] }>({
method: "GET",
url: "/xxx/list",
params: { pageNum: 1, pageSize: 10 },
});
console.log(data.records);
跳过 Authorization
import { request } from "@/utils/request";
await request<string>(
{
method: "GET",
url: "/public/ping",
},
{ skipAuth: true },
);
临时追加 headers
import { request } from "@/utils/request";
await request(
{ method: "POST", url: "/xxx", data: { a: 1 } },
{ headers: { "X-Debug": "1" } },
);
错误处理(只抛错,不做 Toast)
请求失败会抛出一个 RequestError(符合 NormalizedError 结构),可根据 kind 分流:
business:后端返回{ code, message, data }且code !== 0http:HTTP 状态码错误(如 401/403/500)network:断网/超时等(无 response)unknown:返回结构不符合预期等其它情况
示例:
import type { NormalizedError } from "@/shared/request-types";
import { requestData } from "@/utils/request";
try {
await requestData({ method: "GET", url: "/xxx" });
} catch (e) {
const err = e as NormalizedError;
if (err.kind === "business") {
// err.message / err.code
} else if (err.kind === "http") {
// err.httpStatus
} else if (err.kind === "network") {
// err.message
}
}