首页 > 编程语言 >微信小程序 wx.request Typescript 封装统一请求

微信小程序 wx.request Typescript 封装统一请求

时间:2023-12-05 09:11:32浏览次数:40  
标签:Typescript option url 微信 request param msg data

话不多说直接上代码,想懂的终究会懂,哈哈哈哈

文件名:request.ts 

  1 /**
  2  * HttpMethod 类型 api 处要用
  3  */
  4 export enum HttpMethod {
  5   Get = "GET",
  6   Post = "POST",
  7   Options = "OPTIONS",
  8   Put = "PUT",
  9   Delete = "DELETE",
 10 }
 11 
 12 /**
 13  * 请求参数接口
 14  */
 15 interface RequestConfig extends WechatMiniprogram.RequestOption {
 16   showMsg?: true,//显示错误信息
 17   auth?: Boolean,//是否需要鉴权
 18 }
 19 
 20 /**
 21  * 请求类
 22  */
 23 class HttpRequest {
 24   private static instance: HttpRequest;
 25   private constructor() { };
 26 
 27   /**
 28    * 实例
 29    */
 30   public static getInstance(): HttpRequest {
 31     if (!this.instance) {
 32       this.instance = new HttpRequest()
 33     }
 34     return this.instance
 35   }
 36 
 37   /**
 38    * 请求
 39    * @param option 
 40    */
 41   private request<T>(option: RequestConfig): Promise<T> {
 42     let _this = this;
 43     return new Promise((resolve, reject) => {
 44       const { url, method, data, dataType } = option;
 45       if (option.auth) {
 46         option.header = {
 47           "Authorization": "bearer token"
 48         }
 49       }
 50       wx.request({
 51         url, method, data, dataType,
 52         success(res: WechatMiniprogram.RequestSuccessCallbackResult) {
 53           const code = res.statusCode;
 54           const result = res.data as any;
 55           if (code === 200) {
 56 
 57             if (result.code == 200) {

            //根据接口定义返回类型修改这里
            //示例:{code:200,data:null,msg:'ok'}

 58               resolve(result.data) 
 59             } else {
 60 
 61               //处理业务异常
 62               wx.showToast({
 63                 title: result.msg,
 64                 icon: "none"
 65               })
 66 
 67             }
 68 
 69           } else if (code === 401) {
 70             //一些登出提示
 71             reject({ code, msg: "登录超时", data })
 72           } else {
 73             const msg = _this.handleErrorStatus(code, option);
 74             reject({ code, msg, data })
 75           }
 76         },
 77         fail(err: WechatMiniprogram.RequestFailCallbackErr) {
 78           _this.handleError(err, option);
 79           reject(err);
 80         }
 81       })
 82 
 83     })
 84   }
 85 
 86   /**
 87    * 服务异常处理
 88    * @param statusCode 
 89    * @param option 
 90    */
 91   private handleErrorStatus(statusCode: number, option: RequestConfig) {
 92     let msg = "服务找不到";
 93     if (statusCode === 502 || statusCode === 503) {
 94       msg = "服务开小差了~"
 95     }
 96     if (option.showMsg) {
 97       wx.showToast({
 98         title: `${msg},错误码:${statusCode}`,
 99         icon: "none"
100       })
101     }
102     return msg;
103   }
104   /**
105    * 请求失败处理
106    * @param err 
107    * @param option 
108    */
109   private handleError(err: { errMsg: string }, option: RequestConfig): string {
110     console.log(err, '异常请求');
111     let msg = "请求异常";
112     if (/timeout/.test(err.errMsg)) {
113       msg = "请求超时"
114     }
115     if (option.showMsg) {
116       wx.showToast({
117         title: msg,
118         icon: "none"
119       })
120     }
121     return msg;
122   }
123 
124   /**
125    * Get 请求
126    * @param url 
127    * @param data 
128    */
129   public Get<T = any>(url: string, data?: any, otherOption?: RequestConfig): Promise<T> {
130     return this.request<T>({ method: HttpMethod.Get, url, data, ...otherOption })
131   }
132 
133   /**
134    * Post 请求
135    * @param url 
136    * @param data 
137    */
138   public Post<T = any>(url: string, data?: any, otherOption?: RequestConfig): Promise<T> {
139     return this.request<T>({ method: HttpMethod.Post, url, data, ...otherOption });
140   }
141 
142   /**
143    * Delete 请求
144    * @param url 
145    * @param data 
146    */
147   public Delete<T = any>(url: string, data?: any, otherOption?: RequestConfig): Promise<T> {
148     return this.request<T>({ method: HttpMethod.Delete, url, data, ...otherOption })
149   }
150 
151   /**
152   * Put 请求
153   * @param url 
154   * @param data 
155   */
156   public Put<T = any>(url: string, data?: any, otherOption?: RequestConfig): Promise<T> {
157     return this.request<T>({ method: HttpMethod.Put, url, data, ...otherOption });
158   }
159 
160 }
161 
162 /**
163  * 单例请求实例
164  */
165 export const httpRquest = HttpRequest.getInstance()

 

标签:Typescript,option,url,微信,request,param,msg,data
From: https://www.cnblogs.com/cuiguoliang/p/17876469.html

相关文章

  • 领导分享的微信小程序音乐请你帮忙下载
     早上领导分享了一个音乐给我,问我能不能下载,必须可以下载,安排:步骤分享:1.打开领导分享过来的音乐开始播放。2.打开手机上的文件管理器,依次找到目录“我的手机/Android/data/com.tencent.mm/MicroMsg/”,保证列表按时间排序,然后在靠前的位置找一个名字很长的文件夹,文件夹名是数......
  • TypeScript中的类
    TypeScript类1.TypeScript中类的意义​ 相对以前JavaScript不得不用构造函数来充当”类“,TypeScript类的出现可以说是一次技术革命。让开发出来的项目尤其是大中项目的可读性好,可扩展性好了不是一点半点。​ TypeScrip类的出现完全改变了前端领域项目代码编写模式,配合......
  • 1.TypeScript安装
    TypeScript是由微软开发的一款开源的编程语言。它是JavaScript的超级,扩展了JavaScript的语法,遵循最新的ES6、ES5规范。TypeScript更像后端java、C#这样的面向对象语言可以让js开发大型企业项目。安装TypeScriptnpminstall-gtypescript//安装命令tschelloworld.ts......
  • 做好微信私域一定要知道的5大触点
    第一,是公众号第二,是视频号第三,是朋友圈第四,是微信群第五,是私信......
  • 【毕设精选】基于微信小程序的校园跑腿+后台管理系统
    基于微信小程序的校园跑腿+后台管理系统前言我的优势自己的网站自己的小程序(小蔡coding)有保障的售后福利需求分析性能分析系统设计管理员功能模块学生功能模块图跑腿者功能模块图数据库ER图学生信息实体属性图跑腿者信息实体图流程图登录流程部分功能展示学生发起跑腿请求订单管理......
  • 【毕设精选】基于微信小程序的相关系统
    小程序前言......
  • 基于微信小程序的餐厅点餐系统设计与实现(源码+lw+部署文档+讲解等)
    文章目录前言运行环境说明用户微信端的主要功能有:管理员的主要功能有:具体实现截图详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利代码参考论文参考源码获取前言......
  • 【全栈第二课】微信小程序快速入门
    前言笔记大部分来自黑马程序员提供的ppt,部分来于自己总结一、起步简介小程序与普通网页开发的区别注册账号和微信开发者工具注册https://mp.weixin.qq.com/主体类型为个人开发工具https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html微信开发者工具页面组成小......
  • 知识付费在线教育云课堂公众号微信抖音小程序h5开发
    知识付费在线教育云课堂公众号微信抖音小程序h5开发知识付费在线教育云课堂公众号、微信、抖音、小程序、H5开发功能介绍如下:在线直播:提供师生互动、实时答疑、在线讲解等功能,让学生能够通过云课堂平台实时参与课程,提高学习效果。视频课程:提供高质量的视频课程,学生可以随时随地观......
  • 【Java 进阶篇】Java Request 获取请求体数据详解
    在JavaWeb开发中,获取HTTP请求的请求体数据是一项常见任务。HTTP请求的请求体通常包含了客户端提交的数据,例如表单数据、JSON、XML等。在Java中,可以使用HttpServletRequest对象来获取HTTP请求的请求体数据。本文将详细解释如何使用Java获取HTTP请求的请求体数据,并提供示例代码。HTT......