返回

uniapp + Vue3 + Setup + TS 开发小程序实战(网络请求封装篇)

前端

前言

随着uniapp和小程序开发的不断升温,越来越多的开发者开始使用Uniapp + Vue3 + Setup + TS来进行开发。同时,对于请求的封装也成为开发者们共同关注的话题。

请求封装的主要目的:

  • 添加typescript类型提示
  • 在拦截器里面进行一些统一配置,如设置header、针对错误码统一提示等
  • 多入口场景下,在未登录时,在拦截器里完成无痕登录后再请求

下面,我们将对这些目的逐一进行讲解:

一、添加typescript类型提示

在使用Uniapp + Vue3 + Setup + TS开发小程序时,我们可以通过typescript来为请求的封装添加类型提示。这样做的好处是:

  • 可以提高代码的可读性和可维护性
  • 可以减少开发中的错误
  • 可以方便地进行重构和维护

下面是使用typescript为请求的封装添加类型提示的示例:

// 请求封装
const request = (options: RequestOptions): Promise<any> => {
  // ...
};
// 类型定义
interface RequestOptions {
  url: string;
  method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
  data?: any;
  headers?: Record<string, string>;
  timeout?: number;
}

二、在拦截器里面进行一些统一配置

在使用Uniapp + Vue3 + Setup + TS开发小程序时,我们还可以在拦截器里面进行一些统一的配置。这样做的好处是:

  • 可以减少代码的冗余
  • 可以提高代码的可维护性
  • 可以方便地进行重构和维护

下面是使用Uniapp + Vue3 + Setup + TS开发小程序,在拦截器里面进行一些统一配置的示例:

// 请求拦截器
const requestInterceptor = (config: AxiosRequestConfig): AxiosRequestConfig => {
  // ...
};

// 响应拦截器
const responseInterceptor = (response: AxiosResponse): AxiosResponse => {
  // ...
};

// 创建axios实例
const axios = Axios.create({
  baseURL: 'http://localhost:3000',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
});

// 添加拦截器
axios.interceptors.request.use(requestInterceptor);
axios.interceptors.response.use(responseInterceptor);

三、多入口场景下的无痕登录

在使用Uniapp + Vue3 + Setup + TS开发多入口小程序时,我们经常会遇到这样的场景:

  • 在未登录状态下,用户访问某个页面时,需要先进行登录才能继续操作
  • 但是,我们不想让用户在登录页面上停留太久,希望能够在后台悄悄地完成登录,然后直接跳转到目标页面

这种登录方式就叫做“无痕登录”。

下面是使用Uniapp + Vue3 + Setup + TS开发多入口小程序,实现无痕登录的示例:

// 在App.vue中
const app = Vue.createApp(App);

// 监听登录状态变化事件
app.config.globalProperties.$onLoginStatusChange = (isLogin: boolean) => {
  // ...
};

// 创建axios实例
const axios = Axios.create({
  baseURL: 'http://localhost:3000',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
});

// 请求拦截器
const requestInterceptor = (config: AxiosRequestConfig): AxiosRequestConfig => {
  // 在这里检查登录状态
  if (!isLogin) {
    // 如果未登录,则先进行无痕登录
    return silentLogin().then(() => {
      // 登录成功后,重新请求
      return request(config);
    });
  }

  return config;
};

// 添加拦截器
axios.interceptors.request.use(requestInterceptor);

结语

以上就是使用Uniapp + Vue3 + Setup + TS开发小程序时,关于请求封装的相关讲解。希望大家能够通过本文掌握这些技巧,从而提高自己的开发效率和代码质量。