Skip to content

Service 请求服务

WARNING

  • service.xx 请求方式目前已下线,后续版本将以更优的方式重新提供。
  • 当前推荐使用 request 方法进行接口请求。

请求配置

ts
type RequestOptions = {
  url: string; // 请求地址
  method?: RequestMethod; // 请求方法 (GET, POST, PUT, DELETE等)
  data?: any; // 请求体数据
  params?: any; // URL查询参数
  header?: any; // 自定义请求头
  timeout?: number; // 超时时间(毫秒)
  withCredentials?: boolean; // 是否携带凭证信息
  firstIpv4?: boolean; // 是否优先使用IPv4
  enableChunked?: boolean; // 是否启用分块传输编码
};

响应数据结构

ts
type Response = {
  code?: number; // 响应状态码
  message?: string; // 响应消息
  data?: any; // 响应数据
};

使用指南

当需要更灵活的请求配置时,可以使用request方法:

  • 请求参数必须提供默认值 {}
  • request 必须带返回值类型
ts
import { request, type Response, type UserAddressEntity, parse } from "@/cool";
import { useUi } from "@/uni_modules/cool-ui";
import { ref } from "vue";

const ui = useUi();

// 返回值类型,根据实际场景去修改
type Pagination = {
  total: number;
  page: number;
  size: number;
};

type PageResponse = {
  list: UTSJSONObject[];
  pagination: Pagination;
};

// 自定义请求配置
request({
  url: "/app/user/address/page", // URL会自动拼接config中的baseUrl
  method: "POST",
  data: {
    page: 1,
    size: 10,
  },
})
  .then((res) => {
    if (res != null) {
      // 需要手动进行类型转换
      const { list, pagination } = parse<PageResponse>(res)!;
    }
  })
  .catch((err) => {
    // 统一的错误处理
    ui.showToast({
      message: (err as Response).message!,
    });
  });

重要提示

类型安全

  • 错误处理catch回调中的err参数必须使用as Response进行类型断言,否则在 APP 端会报错
  • 类型一致性:赋值变量的类型必须与返回数据类型一致,或通过适当的类型转换处理
  • 泛型指定:使用request方法时,需要明确指定返回数据类型,未知类型可使用UTSJSONObject

请求参数

  • 默认值:所有请求参数都必须提供默认值{},这是由于 uni-app 框架限制
  • URL 处理:请求 URL 会自动拼接配置文件中的baseUrl
  • 第三方接口:支持直接使用httphttps开头的完整 URL 调用第三方服务