1.0.3 • Published 10 months ago

axios-uniapp-adapter-zt v1.0.3

Weekly downloads
-
License
MIT
Repository
-
Last release
10 months ago

axios-uniapp-adapter

版本要求

  • axios: <=1.6.8 (由于小程序环境限制,暂不支持更高版本)

一个用于 UniApp 的 Axios 适配器,支持小程序、H5 和 App 平台。

特性

  • 完整的 TypeScript 支持
  • 支持所有 UniApp 平台(小程序、H5、App)
  • 支持文件上传和下载
  • 支持上传/下载进度监听
  • 支持请求和响应拦截器
  • 支持请求超时配置
  • 支持 baseURL
  • 支持 validateStatus 自定义验证
  • 支持 responseType 配置
  • 完善的错误处理

安装

npm install axios-uniapp-adapter

基础使用

创建实例

import axios from "axios";
import uniAppAdapter from "axios-uniapp-adapter";

const instance = axios.create({
  adapter: uniAppAdapter,
  baseURL: "https://api.example.com",
  timeout: 5000,
  headers: {
    "Content-Type": "application/json",
  },
});

常规请求

// GET 请求
instance
  .get("/users")
  .then((response) => {
    console.log(response.data);
  })
  .catch((error) => {
    console.error(error);
  });

// POST 请求
instance.post("/users", {
  name: "John",
  age: 30,
});

// PUT 请求
instance.put("/users/1", {
  name: "John Doe",
});

// DELETE 请求
instance.delete("/users/1");

文件上传

// 单文件上传
instance.request({
  url: "/upload",
  method: "upload",
  data: file, // File 对象或文件路径
  name: "file", // 文件字段名
  formData: {
    // 额外的表单数据
    type: "avatar",
  },
  onProgressUpdate: (progress) => {
    console.log("上传进度:", progress.progress);
    console.log("已上传:", progress.totalBytesSent);
    console.log("总大小:", progress.totalBytesExpectedToSend);
  },
});

// 使用本地文件路径上传
instance.request({
  url: "/upload",
  method: "upload",
  data: "/storage/images/photo.jpg",
  name: "photo",
});

文件下载

// 下载文件
instance.request({
  url: "/download",
  method: "download",
  filePath: "/storage/downloads/file.pdf", // 保存路径
  onProgressUpdate: (progress) => {
    console.log("下载进度:", progress.progress);
    console.log("已下载:", progress.totalBytesWritten);
    console.log("文件大小:", progress.totalBytesExpectedToWrite);
  },
});

使用工厂函数创建适配器

import { createUniAppAdapter } from "axios-uniapp-adapter";

// 创建带有默认配置的适配器
const adapter = createUniAppAdapter({
  timeout: 10000,
  validateStatus: (status) => status >= 200 && status < 500,
});

const instance = axios.create({ adapter });

配置选项

基础配置

参数类型说明默认值
baseURLstring请求的基础 URL-
timeoutnumber请求超时时间(毫秒)-
headersobject请求头{}
withCredentialsboolean是否携带凭证false
validateStatusfunction自定义验证状态码status >= 200 && status < 300
responseTypestring响应数据类型'text'

上传配置

参数类型说明
methodstring必须设置为 'upload'
dataFile | string要上传的文件对象或路径
namestring文件对应的 key
formDataobject附加的表单数据
onProgressUpdatefunction上传进度回调

下载配置

参数类型说明
methodstring必须设置为 'download'
filePathstring文件下载后的保存路径
onProgressUpdatefunction下载进度回调

错误处理

instance
  .request({
    url: "/api/data",
    method: "get",
  })
  .catch((error) => {
    if (error.code === "ECONNABORTED") {
      console.log("请求超时");
    }
    if (error.response) {
      // 服务器返回错误状态码
      console.log(error.response.status);
      console.log(error.response.data);
    }
    console.log(error.message);
  });

TypeScript 支持

import { UniAppRequestConfig } from "axios-uniapp-adapter";

const config: UniAppRequestConfig = {
  url: "/upload",
  method: "upload",
  data: file,
  onProgressUpdate: (progress) => {
    console.log(progress.progress);
  },
};

注意事项

  1. 在小程序环境中,某些请求头可能会被限制
  2. 跨域请求需要在小程序管理后台配置域名白名单
  3. H5 环境下需要注意跨域问题
  4. 文件上传时,H5 环境支持 File 对象,小程序环境使用文件路径
  5. 下载文件时需要确保有写入权限

License

MIT

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago