0.0.2 • Published 2 years ago

h-wx-ajax v0.0.2

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

介绍

本库是开发微信小程序的http请求库,是基于 axios 原理对微信小程序wx.request封装的,本库轻便,小巧,api友好,功能丰富

✨ 特性

  • 支持 Promise API
  • 支持 Typescript 开发
  • 拦截请求和响应
  • 自定义配置请求实例
  • 多种 Method 方法请求
  • 支持 RequestTask 操作

🥗 安装

NPM

# 如果您的项目根目录没有package.json文件的话,请先执行如下命令生成:
npm init -y

# 安装
npm install h-wx-ajax

# 更新
npm update h-wx-ajax

🥐 实例

新建 ajax.js 文件(文件名可自定义)用于处理拦截器、接口根地址、默认配置等

// ajax.js

import ajax from 'h-wx-ajax'                                    // 引入 wx-ajax 模块

const instance = ajax.create(config)                          // 创建请求实例

instance.interceptors.request.use((config) => {               // 添加请求拦截器
    // 发送请求前处理...
    return config;
}, (err) => {
    return Promise.reject(err);
})     
instance.interceptors.response.use((response) => {            // 添加响应拦截器
    // 返回结果拦截处理...
    return response;
}, (err) => {
    return Promise.reject(err);
}) 

export default instance                                        // 导出创建后的实例

🥪 使用

请求方法

// 常规方法
ajax()

// 请求方法别名
ajax.get()
ajax.post()
ajax.put()
ajax.delete()

RequestTask

const request = ajax()                  // 请求方法每项皆可

request.abort()                         // 中断请求任务
request.onHeadersReceived(callback)     // 监听 HTTP Response Header 事件
request.offHeadersReceived(callback)    // 取消监听 HTTP Response Header 事件

其他属性方法

ajax.defaults          // 全局默认配置
ajax.config            // 当前实例配置
ajax.getURL(config)    // 获取实例请求地址

上传

h-wx-ajax 暂时只支持发起网络请求,如果你想要上传,你可以使用 wx.uploadFile 。这里举例,你可以根据项目实际情况处理。

// ajax.js
// 在 Ajax 实例上挂载 upload 方法
instance.upload = function upload({ url, filePath, formData, } = {}, callback) {
  return new Promise(async (resolve, reject) => {
        url = await this.getURL({ url });
        const token = "Token";
        const uploadTask = wx.uploadFile({
            url,
            filePath,
            name: 'file',
            header: {
                'Content-Type': 'multipart/form-data',
                "Authori-zation": token
            },
            ...args,
            // 如果第二个参数是 object 类型则作为 formData 使用
            formData: typeof formData === 'object' ? formData : {},
            complete: res => {
                if (res.statusCode === 200) {
                    res.data = typeof res.data === "string" ? JSON.parse(res.data) : { code: 500, msg: 'error' }
                    resolve(res.data)
                } else {
                    reject(res)
                }
            }
        })
        // 如果第二个参数是 function 类型则作为 uploadTask 的回调函数使用
        if (typeof callback === 'function') {
            callback(uploadTask)
        }
    })
}


// 使用方式
instance.upload({ url: 'upload', filePath: "file", formData: { name: '头像' } }); // 例子