123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /**
- * 添加拦截器:
- * 拦截 request 请求
- * TODO:
- * 1. 非 http 开头需拼接地址
- * 2. 请求超时
- * 3. 添加小程序端请求头标识
- * 4. 添加 token 请求头标识
- */
- // import { useInfoStore } from "@/stores";
- // import { loadEnv } from "vite";
- // const env: Record<string, string> = loadEnv();
- const baseURL = import.meta.env.VITE_API_URL; //process.env.VITE_API_URL;
- console.log("--------------------------", import.meta.env.VITE_API_URL);
- // const baseURL = import.meta.env.MODE === 'production' ? import.meta.env.VITE_API_URL + '/prod-api' : import.meta.env.VITE_API_URL
- // const baseURL = import.meta.env.VITE_API_URL + '/prod-api'
- // 添加拦截器
- const httpInterceptor = {
- // 拦截前触发
- invoke(options: UniApp.RequestOptions) {
- // 1. 非 http 开头需拼接地址
- if (!options.url.startsWith("http")) {
- options.url = baseURL + options.url;
- }
- // 2. 请求超时, 默认 60s
- options.timeout = 30000;
- // 3. 添加小程序端请求头标识
- options.header = {
- ...options.header,
- "source-client": "miniapp",
- };
- // 4. 添加 token 请求头标识
- // const InfoStore = useInfoStore();
- // const token = InfoStore?.token;
- // if (token) {
- // options.header.Authorization = token;
- // }
- },
- };
- uni.addInterceptor("request", httpInterceptor);
- /**
- * 请求函数
- * @param UniApp.RequestOptions
- * @returns Promise
- * 1. 返回 Promise 对象
- * 2. 获取数据成功
- * 2.1 提取核心数据 res.data
- * 3. 获取数据失败
- * 3.1 401错误 -> 清理用户信息,跳转到登录页
- * 3.2 其他错误 -> 根据后端错误信息轻提示
- * 3.3 网络错误 -> 提示用户换网络
- */
- // 2.2 添加类型,支持泛型
- export const http = (options: UniApp.RequestOptions) => {
- // 1. 返回 Promise 对象
- return new Promise((resolve, reject) => {
- uni.request({
- ...options,
- // 响应成功
- success(res: any) {
- // 状态码 2xx, axios 就是这样设计的
- if (res.statusCode >= 200 && res.statusCode < 300) {
- if (res.data.code == 401) {
- // 401错误 -> 清理用户信息,跳转到登录页
- // const InfoStore = useInfoStore();
- // InfoStore.clearToken();
- uni.redirectTo({ url: "/" });
- } else {
- // 2.1 提取核心数据 res.data
- resolve(res.data);
- }
- } else if (res.statusCode === 401) {
- // 401错误 -> 清理用户信息,跳转到登录页
- // const InfoStore = useInfoStore();
- // InfoStore.clearToken();
- uni.redirectTo({ url: "/" });
- reject(res);
- } else {
- // 其他错误 -> 根据后端错误信息轻提示
- uni.showToast({
- icon: "none",
- title: res.data.msg || "请求错误",
- });
- reject(res);
- }
- },
- // 响应失败
- fail(err) {
- uni.showToast({
- icon: "none",
- title: "网络错误,换个网络试试",
- });
- reject(err);
- },
- });
- });
- };
|