微信小程序(二十八)微信小程序封装request请求

简介: const utils = require("../utils/util.js"); var app = getApp(); // 请求方式(定义完了又好像觉得没啥用,放着吧)const GET = "GET";const POST = "POST";const PUT = "PUT";const FORM = "FORM";const DELETE = "DELETE"; // 系统域名const baseURL = "https://www.mools.net"; /** * @name: 用户请求方法,使用promise实现 * @author: came

公司项目开发新版小程序,为了http实现请求统一管理,我这里对微信的request请求使用promise进行一个统一的封装。

这样满足了我们对http请求的统一控制,统一更改

最重要的是减少了很多代码的重复量,减少了很多wx.request的使用

在封装request之前,建议各位看官移步wx.request以及promise的官方文档

wx.request请点击这里

promise请点击这里

一:封装:

在项目根目录下创建request目录:

Request 目录下文件如下图所示:

image.png

Request.js是封装的request请求的文件

javascript

复制代码

const utils = require("../utils/util.js");
var app = getApp();
// 请求方式(定义完了又好像觉得没啥用,放着吧)
const GET = "GET";
const POST = "POST";
const PUT = "PUT";
const FORM = "FORM";
const DELETE = "DELETE";
// 系统域名
const baseURL = "https://www.mools.net";
/**
 * @name: 用户请求方法,使用promise实现
 * @author: camellia
 * @date: 2021-11-08
 * @param {*} method 请求方式
 * @param {*} url 请求连接
 * @param {*} data 请求数据
 */
const request = (method, url, data) => {
  return new Promise(function (resolve, reject) {
    let header = {
      "content-type": "application/json",
    };
    var requestData = data;
    if (method == "POST") {
      requestData = JSON.stringify(data);
    }
    // 展示loading效果
    // utils.showLoading("加载中……");
    // resolve 进success  reject 进fail
    wx.request({
      url: baseURL + url,
      method: method,
      data: requestData,
      header: header,
      success(result) {
        // console.log(result);
        //请求成功
        //判断状态码---errCode状态根据后端定义来判断
        if (result.data.code > 0)
        {
          // 返回值正常
          resolve(result);
          // 关闭loading效果
          // utils.hideLoading();
        }
        else if (result.data.code == -200)
        {
          // 系统错误
          utils.showToast(result.data.msg);return;
        }
        else if (result.data.code == -201)
        {
          // 登录失效
          app.userLogin();
        }
        else
        {
          // 其他异常
          resolve(result);
        }
      },
      fail(result)
      {//请求失败
        utils.hideLoading();
        resolve(result);
      },
      complete: () => {
        setTimeout(() => {
          // 关闭loading效果
          utils.hideLoading();
        }, 100);
      },
    });
  });
};
/**
 * @name: 上传文件,使用promise实现
 * @author: camellia
 * @date: 2021-11-23
 * @param {*} url 请求连接
 * @param {*} filePath 微信临时文件链接(数据流)
 * @param {*} sign 请求加密字符串
 * @param {*} params 加密参数
 */
const upload = (url,filePath,sign,params) => {
  return new Promise((resolve) => {
    wx.uploadFile({
      url: baseURL + url,
      filePath: filePath,
      formData: {
        'sign':JSON.stringify(sign),
        'params':JSON.stringify(params)
      },
      name: "file",
      success(res) {
        resolve(JSON.parse(res.data));
      },
    });
  });
};
/**
 * POST请求:(暂时没用上)
 * URL:接口
 * postData:参数,json类型
 * doSuccess:成功的回调函数
 * doFail:失败的回调函数
 */
const postData = (url, postData, doSuccess, doFail) => {
  wx.request({
    //项目的真正接口,通过字符串拼接方式实现
    url: host + url,
    // 这个header根据你的实际改!
    header: {
      "Content-Type": "application/json",
      cookie: config.httpToken,
      "Request-Origin": "app",
    },
    data: postData,
    method: "POST",
    success: function (res) {
      //参数值为res.data,直接将返回的数据传入
      if (res.data.result.token) {
        // 如果有token保存下来,下次请求带着token访问
        config.httpToken = res.data.result.token;
        // console.log("token--> ", config.httpToken);
      }
      doSuccess(res.data);
    },
    fail: function () {
      doFail();
    },
  });
};
/**
 * GET请求:(暂时没用上)
 * URL:接口
 * getData:参数,json类型
 * doSuccess:成功的回调函数
 * doFail:失败的回调函数
 */
const getData = (url, getData, doSuccess, doFail) => {
  wx.request({
    url: host + url,
    header: {
      "Content-Type": "application/json",
      "X-Access-Token": config.httpToken,
      "Request-Origin": "app",
    },
    method: "GET",
    data: getData,
    success: function (res) {
      doSuccess(res.data);
    },
    fail: function () {
      doFail();
    },
  });
};
module.exports = {
  request,
  upload,
  baseURL:baseURL
};

这里说明一下,以上的代码,

使用promise封装了 wx.request请求以及wx. uploadFile请求

 

Api.js是编写统一请求接口的文件

javascript

复制代码

// 引入请求方法
const request = require('./request.js').request;
// 上传
const upload = require("./request.js").upload;
/**
 * @name: 公共请求接口
 * @author: camellia
 * @date: 2021-11-15
 */
const API = {
  // 用户登录 / 注册
  userLogin: (data) => {
    return request('POST', `/xxxx/xxx/index.php/xxxx/userLogin`,data)
  },
  // 获取用户身份信息
  getUserInfoByUserid: (data) => {
    return request('POST', `/xxx/xxx/index.php/xxx/getUserInfoByUserid`,data)
  },
};
/**
 * @name: 导出
 * @author: camellia
 * @date: 2021-11-15
 */
module.exports = {
  API: API,
};

以上就是我这里对wx.request以及wx.uploadFile的封装。

那么,这个玩意应该如何在使用中调用呢?

 

二:调用

1:首先我们在js中引入api.js下的API对象

javascript

复制代码

// api 请求类
const API = require("./request/api.js").API;

 

2:调用API对象下的请求

javascript

复制代码

// 调用接口用户登录 / 注册
          API.userLogin(data)
            .then((result) => {
              console.log(result);
              //请求成功
              // 如果用户没有头像或昵称跳转到授权页
              if (!result.data.avatarUrl || !result.data.nickName) {
                wx.reLaunch({
                  url: "/pages/grantAuth/grantAuth",
                });
              }
              // 隐藏加载
              wx.hideLoading();
            })
            .catch((result) => {
              //请求失败
            });

以上大概就是对微信的request以及uploadFile请求的封装以及调用

有好的建议,请在下方输入你的评论

欢迎访问个人博客:guanchao.site

欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”

目录
打赏
0
0
0
0
16
分享
相关文章
微信小程序入门之新建并认识小程序结构
微信小程序入门之新建并认识小程序结构
123 1
除了微信小程序,PHP 还可以用于开发哪些类型的小程序?
除了微信小程序,PHP 还可用于开发多种类型的小程序,包括支付宝小程序、百度智能小程序、抖音小程序、企业内部小程序及行业特定小程序。在电商、生活服务、资讯、工具、娱乐、营销等领域,PHP 能有效管理商品信息、订单处理、支付接口、内容抓取、复杂计算、游戏数据、活动规则等多种业务。同时,在企业内部,PHP 可提升工作效率,实现审批流程、文件共享、生产计划等功能;在医疗和教育等行业,PHP 能管理患者信息、在线问诊、课程资源、成绩查询等重要数据。
ly~
159 6
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
2041 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
微信小程序之网络数据请求 wx:request的简单使用
这篇文章介绍了微信小程序中如何使用wx.request进行网络数据请求,包括请求的配置、请求的格式以及如何在开发阶段关闭请求的合法检验。
微信小程序之网络数据请求 wx:request的简单使用
|
6月前
|
小程序通过get请求提交数据到java后台
小程序通过get请求提交数据到java后台
56 0
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
在 `src/http` 目录下创建 `request.ts` 文件,并配置 Taro 的网络请求方法 `Taro.request`,支持多种 HTTP 方法并处理数据加密。
288 0
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
微信小程序给 thinkphp后端发送请求出现错误 Wrong number of segments 问题的解决 【踩坑记录】
本文记录了微信小程序向ThinkPHP后端发送请求时出现"Wrong number of segments"错误的解决方法。问题原因是小程序请求header中的token变量名写错,导致token未正确传递至后端。作者提供了详细的检查步骤和建议,包括验证URL路径、参数规范和路由配置的匹配,以确保请求能正确发送和处理。
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
weixin168“返家乡”高校暑期社会实践微信小程序设计与开发ssm(文档+源码)_kaic
本文探讨高校暑期社会实践微信小程序的开发与应用,旨在通过信息化手段提升活动管理效率。借助微信小程序技术、SSM框架及MySQL数据库,实现信息共享、流程规范和操作便捷。系统涵盖需求分析、可行性研究、设计实现等环节,确保技术可行、操作简便且经济合理。最终,该小程序可优化活动发布、学生信息管理和心得交流等功能,降低管理成本并提高工作效率。

热门文章

最新文章