程序开发中都会调用后端工程师开发的API,小程序的开发文档提供了相对实用的APIwx.request(),但是在开发的过程中,又遇到了一些问题,在小程序的项目开发时,调用的API不止一个,同一个API调用不止一次。同时,对于调用的API的管理也十分复杂,这样的背景下,对wx.request()方法的封装变得尤为重要。
  本文的解决思路为:将API的路径和方法放在一个文件里面方便管理;封装小程序的request方法,并返回promise处理(ES6)。

一、units文件夹中新建request.js文件

  1. // utils/request.js
  2. //封装request
  3.  
  4. let apiRequest = (url, method, data, header) => { //接收所需要的参数,如果不够还可以自己自定义参数
  5. let promise = new Promise(function (resolve, reject) {
  6. wx.showNavigationBarLoading() //在标题栏中显示加载
  7. wx.request({
  8. url: url,
  9. data: data ? data : null,
  10. method: method,
  11. header: header ? header : { 'content-type': 'application/x-www-form-urlencoded' },
  12. complete: function () {
  13. wx.hideNavigationBarLoading(); //完成停止加载
  14. wx.stopPullDownRefresh(); //停止下拉刷新
  15. },
  16. success: function (res) {
  17. //接口调用成功
  18. resolve(res.data); //根据业务需要resolve接口返回的json的数据
  19. },
  20. fail: function (res) {
  21. wx.showModal({
  22. showCancel: false,
  23. confirmColor: '#1d8f59',
  24. content: '数据加载失败,请检查您的网络,点击确定重新加载数据!',
  25. success: function (res) {
  26. if (res.confirm) {
  27. apiRequest(url, method, data, header);
  28. }
  29. }
  30. });
  31. wx.hideLoading();
  32. }
  33. })
  34. });
  35. return promise; //注意,这里返回的是promise对象
  36. }
  37.  
  38. export default apiRequest;

二、units文件夹中新建api.js文件

  1. import apiRequest from './request.js';
  2. const HOST = 'http://www.mingmingym.com';
  3. const API_LIST = {
  4. all: {
  5. method: 'POST',
  6. url: '/e/extend/api/type.php'
  7. },
  8. }
  9.  
  10. /*
  11. 多参数合并
  12. */
  13. function MyHttp(defaultParams, API_LIST) {
  14. let _build_url = HOST;
  15. let resource = {};
  16. for (let actionName in API_LIST) {
  17. let _config = API_LIST[actionName];
  18. resource[actionName] = (pdata) => {
  19. let _params_data = pdata;
  20. return apiRequest(_build_url + _config.url, _config.method, _params_data, {
  21. 'content-type': 'application/x-www-form-urlencoded;charset=utf-8;Authorization;'
  22. });
  23. }
  24. }
  25. return resource;
  26. }
  27. const Api = new MyHttp({}, API_LIST);
  28. export default Api;

三、业务中使用

  1. import Api from '/../../utils/api.js';
  2. .
  3. .
  4. .
  5. getAll() {
  6. Api.all({ id: 1 }).then(res => {
  7. console.log(res);
  8. })
  9. }

通过对小程序网络请求方法的二次封装,使得我们的代码看上去更加的简洁,在接口的管理上也相对的便利,比如在后端修改API的路径和方法时,只需要在api.js文件中修改相应的API即可,也免去了修改时忽略了更多调用的麻烦。同时,也提高了代码的复用性,一劳永逸。
————————————————
原文链接:https://blog.csdn.net/mingcodes/article/details/103582581

小程序封装request请求,统一API的更多相关文章

  1. 小程序封装request请求

    //request.js var host = 'https://www.xxx.com';//请求域名 module.exports = function (type, params, method ...

  2. 监控微信小程序wx.request请求失败

    在微信小程序里,与后台服务器交互的主要接口函数是wx.request(),用于发起 HTTPS 网络请求.其重要性不言而喻.然而,却经常遇到请求失败的问题,笔者特意谷歌"wx.request ...

  3. 关于微信小程序的Request请求错误处理

    在学微信小程序的request请求的时候,一开始报“不在以下合法域名列表中,请参考文”的错误,后来又莫名其妙的报“400 Bad Request”错误,经过半天的研究,终于搞定了,把遇到的错误给大家分 ...

  4. 微信小程序wx.request请求用POST后台得不到传递数据

    微信小程序的wx.request请求,method设为POST并向后台传递数据,但从后台返回的信息来看后台并没有获得传递的数据 wx.request({              url: 'url' ...

  5. 微信小程序- wx.request请求不到数据

    小程序官方文档手册 https://mp.weixin.qq.com/debug/wxadoc/dev/ 小程序开发问答社区 http://www.henkuai.com/forum.php wx.r ...

  6. 微信小程序wx.request请求服务器json数据并渲染到页面

    [原文出自]: https://blog.csdn.net/weixin_39927850/article/details/79766259 微信小程序的数据总不能写死吧,肯定是要结合数据库来做数据更 ...

  7. 小程序发送 request请求失败 提示不在合法域名列表中的解决方法

    可以在小程序开发工具中设置不校验域名.

  8. 微信小程序测试request请求webapi

    using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...

  9. 小程序 wx.request请求

    1.wx.request相当于发送ajax请求 微信官方解释 参数 属性 类型 默认值 必填 说明 url string 是 开发者服务器接口地址 data string/object/ArrayBu ...

随机推荐

  1. 是时候考虑让你的Spark跑在K8S上了

    [摘要] Spark社区在2.3版本开始,已经可以很好的支持跑着Kubernetes上了.这样对于统一资源池,提高整体资源利用率,降低运维成本(特别是技术栈归一)有着非常大的帮助.这些趋势是一个大数据 ...

  2. luogu P1379 八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...

  3. “Unknown class XXViewController in Interface Builder file.”问题处理

    在静态库中写了一个XXViewController类,然后在主工程的xib中,将xib的类指定为XXViewController,程序运行时,报了如下错误: “Unknown class XXView ...

  4. python 金融应用(四)金融时间序列分析基础

    1.1.创建DataFrame df=pd.DataFrame(list(range(10,50,10)),columns=['num'],index=['a','b','c','d']) df Ou ...

  5. FlyWay工作原理

    本文译自Flyway官方文档,原文地址https://flywaydb.org/getstarted/how 当你最开始将FlyWay指向一个空数据库时. 它会试着去查找schema历史表,如果此时数 ...

  6. Java_零碎知识回顾

    封装的理解 1.隐藏实现细节,控制对象的访问权限:对外提供公共方法: 隐藏:private 本类可见 继承的理解 ①父类有共性的属性与方法:子类只需要继承,扩展自己独有的属性方法即可,实现了代码的可复 ...

  7. JS基础-正则

    正则表达式 创建正则表达式 使用一个正则表达式字面量 const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi; 调用RegExp对象的构造函数 const regex = ne ...

  8. HTML真零基础教程

    这是为完全没有接触过的童鞋写的,属于真正的傻瓜式教程,当然由于本人也不是什么大佬,可能有些知识的理解与自己想的不一样,如果有大佬看到,还请帮我指出.以下主要是HTML5的基础标签的使用. 开发前的准备 ...

  9. java项目测试环境搭建

    java项目测试环境搭建 2019-03-06 13:45:26 木瓜小少年 阅读数 691更多 分类专栏: 测试   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原 ...

  10. NodeJS3-3基础API----event(事件触发器)

    1.基础(on) // 如果像对象享有事件能力就要集成EventEmitter const EventEmitter = require('events') //集成EventEmitter类 cla ...