微信小程序(二十八)微信小程序封装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

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

目录
相关文章
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
633 7
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
726 1
|
2月前
|
存储 JSON 小程序
微信小程序入门之新建并认识小程序结构
微信小程序入门之新建并认识小程序结构
54 1
|
2月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
226 1
|
2月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
809 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
2月前
|
JavaScript 小程序 开发者
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
419 0
|
2月前
|
小程序
uni-app开发微信小程序使用onPullDownRefresh(下拉刷新)总结
uni-app开发微信小程序使用onPullDownRefresh(下拉刷新)总结
607 0
|
2月前
|
小程序 前端开发 数据可视化
微信商城小程序WeiMall
微信商城小程序WeiMall
37 0
|
3月前
|
小程序 前端开发 API
微信小程序 - 调用微信 API 回调函数内拿不到 this 问题(解决方案)
本文讨论了在微信小程序中调用API回调函数时无法获取到`this`上下文的问题,并提供了解决方案。在回调函数中,使用一个变量(如`that`)来保存当前的`this`引用,然后在回调内部使用这个变量来访问当前页面的数据和方法。
|
2月前
|
小程序 前端开发 测试技术
微信小程序的开发完整流程是什么?
微信小程序的开发完整流程是什么?
130 7