关于微信小程序:封装请求

2023-11-12

点这里

查看进阶版请求封装(拦截器:处理token过期之后的无感知登录+重新发起刚才未成功的请求)

在这里插入图片描述

  1. 新建一个文件夹request(随便起)
  2. 新建env.js
    2.1 在这里,配置接口地址的公共地址部分、方便后续引用。
	//这里使用的接口呢都是自己模拟的,可以根据自己的需求进行添加
    module.exports={
        //开发环境的url
        dev:{
            baseUrl:"http://xxxx"
        },
        //测试环境url
        test:{
            // baseUrl:"http://www.test.com"
        },
        //线上环境url
        prod:{
            // baseUrl:'https://api.it120.cc'
            baseUrl:"https://xxx"
        }
    }
  1. 新建request.js
    3.1 引入env中的url:项目接口地址的公共地址部分。
    3.2 二次封装wx.request
// 引入env中的url
const {
    baseUrl
} = require('./env.js').dev;//这里上线的时候换成线上地址

module.exports = {
    /**
     * 二次封装wx.request
     * url:请求的接口地址
     * method:请求方式 GET,POST....
     *  data:要传递的参数
     * header:请求头
     */
    request: (url, method, data, header) => {
    
        // console.log('这是我封装的ajax请求', url, method, data, header);
        
        let _url = `${baseUrl}/${url}`;//这里使用ES6的写法拼接的字符串
        
        return new Promise((resolve, reject) => {
            // wx.showLoading({
            //     title: '正在加载',
            // });
            wx.request({
                url: _url,
                method: method,
                data: data,
                header: header,
                success: (res) => {
                    // console.log('从接口获取到的数据', res);
                    let data = res.data;
                    if (res.statusCode == 200) {
                        // wx.hideLoading();
                        //统一拦截--------401未登录活登录已过期token过期
                        if (data.code == 401) {
                            // wx.hideLoading();
                            wx.reLaunch({
                                url: '/pages/login/login?token=0',//拼接参数--表明是401--过去的
                            })
                        }
                        if (data.code == 200) {
                            resolve(res.data);
                            // wx.hideLoading();
                            // wx.showToast({
                            //     title: '请求成功',
                            // })
                        }
                        if (data.code == 500) {
                            // wx.hideLoading();
                            wx.showToast({
                                title: '操作失败',
                                icon: 'none',
                                duration: 2000
                            })
                        }
                        if (data.code == 404) {
                            // wx.hideLoading();
                            wx.showToast({
                                title: '参数效验失败',
                                icon: 'none'
                            })
                        }
                        if (data.code == 403) {
                            // wx.hideLoading();
                            wx.showToast({
                                title: '没有相关权限',
                                icon: 'none'
                            })
                        }
                        if (data.code == 402) {
                            wx.hideLoading();
                            wx.showToast({
                                title: '账户已禁用',
                                icon: 'none'
                            })
                        }
                    } else {
                        // wx.hideLoading();
                        wx.showToast({
                            title: '请求有误',
                            icon: 'none'
                        })
                    }
                },
                fail() {
                    // wx.hideLoading();
                    reject('发送失败');
                    wx.reLaunch({
                        url: '/pages/login/login', //
                    })
                    wx.showModal({
                        title: '提示',
                        content: '网络错误',
                        success(res) {
                            if (res.confirm) {
                                console.log('用户点击确定');
                            } else if (res.cancel) {
                                console.log('用户点击取消');
                            }
                        }
                    })
                }
            });

        });
    },
}

  1. 新建api.js:在这里放左右的请求方法。
    4.1 引入封装的reuest请求。
    4.2 写入自己的请求方法。
//引入封装的reuest请求
const {
    request
} = require('./request.js');

const GET = 'GET';
const POST = 'POST';
const PUT = 'PUT';
const FORM = 'FORM';
const DELETE = 'DELETE';


//请求头根据自己的情况配置

//这个是发送登录请求的请求头不需要携带token
//const headerPost = {
//    'content-type': 'application/json',
//};

//这里的请求头需要携带token--但是直接在这里获取会有异步,所以我实在要请求数据的地方获取存在本地的token


// const headerPostToken = {
//     'content-type': 'application/json',
//     'QS_TOKEN': app.globalData.token
// };
// const headerGet = {
//     'content-type': 'application/x-www-form-urlencoded',
//     'QS_TOKEN': wx.getStorageSync('QS_TOKEN')
// };


//基于业务封装的接口
module.exports = {

    /*企业认证-----POST
    参数: */
    certification: (data, headerPostToken) => {
        return request('comp/certification', POST, data, headerPostToken);
    },
    
    /*个人中心-----GET
    参数:  */
    PersonalCenter: (header) => {
        console.log('api', header);
        return request('user', GET, '', header); //没有请求参数,所以为空(如果不加【'',】的话就会出错)
    },
    
    
    /*获取产品列表-----GET
       参数:*/
    getShopList: (searchCode, status, header) => {
        return request('storage/list?searchCode=' + searchCode + '&status=' + status + '&page=1&limit=1000', GET, '', header);
    },
    
}
  1. 引用方法—在你需要用到该方法的页面的js;[eg:index.js]
    5.1 引入方法
//1.引入方法
const { getShopList } = require('../../request/api.js');


  // 请求产品列表
  getAllOrders(searchCode, status) {
    // console.log(status, '调用了获取库存的方法');
    var that = this;

   //获取token---设置请求头
    var header = {
      'content-type': 'application/x-www-form-urlencoded',
      'QS_TOKEN': wx.getStorageSync('QS_TOKEN')
    };
    
    

    // 进入请求所有订单数量
    getShopList(searchCode, status, header).then(resData => {
      // console.log('请求成功----',status,'---', resData);
      if (resData.code == 200) {
        // 请求成功
        
      }
    }).catch(err => {
      // console.log(err)
    })
  },


这里查看进阶版请求封装

(拦截器:处理token过期之后的无感知登录+重新发起刚才未成功的请求)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于微信小程序:封装请求 的相关文章

  • STM32设置IO口输入上拉下拉

    1 按键分类 WK UP按键按下时将高电平信号输入给STM32的IO 即高电平有效 不被按下时 由于干扰 可能高也可能是低信号输入 KEY0按键按下时将低信号输入给STM32的IO 即低电平有效 不被按下时 由于干扰 可能高也可能是低信号输
  • Java基础-学习笔记(三)

    本节记录和学习Java的一种引用数据类型 数组 静态方法的声明 字符串的基本概念和使用 1 数组 array 是具有相同数据元素的有序集合 Java中的数组是引用数据类型 一个数组变量采用应用方式保存多个数组元素 Java的数组都是动态数组

随机推荐

  • Unity内存管理

    文章目录 为什么要进行内存管理 为什么会有Mono和IL2CPP 托管语言 托管代码 Mono IL2CPP 参考 Unity游戏优化第2版 为什么要进行内存管理 内存管理是性能优化的一个重要方面 可能造成性能问题的原因有2个 不必要的内存
  • frp实现内网穿透

    文章目录 一 frp是什么 二 使用步骤 1 需要两台服务器 2 下载frp 和go语言 基于 1 通过自定义域名访问内网的 Web 服务 启动 windows下安装frpc ini 2 配置token才能访问 3 配置udp 4 通过 S
  • 字符数组与字符指针的区别

    字符数组与字符指针的区别 在 C 语言中 可以用两种方法表示和存放字符串 1 用字符数组存放一个字符串 char str IloveChina 2 用字符指针指向一个字符串 char str IloveChina 那么这两种表示方式有什么区
  • 内网渗透之信息收集

    一 内网信息收集概述 渗透测试人员进人内网后 面对的是一片 黑暗森林 所以 渗透测试人员首先需要对当前所处的网络环境进行判断 判断涉及如下三个方面 我是谁 一对 当前机器角色的判断 这是哪 一对 当前机器所处网络环境的拓扑结构进行分析和判断
  • Stm32最小系统板电路图设计、PCB设计

    目录 一 电路设计 1 复位电路 2 时钟电路 3 电源电路 4 SWD接口电路 5 BOOT启动电路 二 原理图绘制 1 工程的建立 2 原理图的绘制 2 1 使用已有库绘制原理图 2 2 构建原理图库 2 3 整体原理图 三 PCB绘制
  • Java堆和栈

    Java堆和栈是Java程序中两个重要的数据结构 它们在程序的运行过程中发挥着重要的作用 本文将介绍Java堆和栈的基本概念 区别 操作以及应用场景 帮助读者更好地理解和应用这两个数据结构 一 基本概念 Java堆 Heap 和栈 Stac
  • vue+elementui 登录页面

    vue elementui 登录页面 html代码
  • Windows 终端 Terminal 配置

    文章目录 Windows 终端 Terminal 配置 修改默认启动的命令 添加 cmder 到 Windows Terminal 添加 git bash 到 Windows Terminal 为Windows PowerShell 配置别
  • vue3.0+elementplus table动态添加column

  • 【Vuex】前后端分离Vue路由拦截器与登录cookie保存

    文章目录 1 Vuex 初探 1 1 vuex 介绍 1 2 store 的使用 2 localStorage使用 2 1 localStorage介绍 2 2 localStorage语法 3 路由钩子函数 导航守卫 3 1 导航守卫介绍
  • 固定资产预算怎么管理的

    在现代企业管理中 固定资产预算的管理是一项至关重要的任务 它不仅关系到企业的经济效益 更关系到企业的长远发展 那么 如何进行有效的固定资产预算管理呢 明确固定资产预算的目标和原则 我们需要明确固定资产预算的目标和原则 固定资产预算的目标应该
  • 利用谷歌的预训练模型实现目标检测object_detection_tutorial.ipynb

    环境准备 运行这个预训练的模型需要准备一些环境 首先需要下载谷歌的models master zip 地址在https github com Master Chen models 下载完成后我们需要的是research objection
  • Java基于微信小程序的一起考研学习平台

    第一章 简介 本文研究了基于微信小程序一起考研学习平台 通过该系统 用户可以主动的在线学习 下载资料 解决实际的问题 提高了效率 同时加强了用户之间的相互交流沟通 促进了信息化的发展 本文研究开发的小程序是学习并上传下载的小程序 开发完成后
  • steam成就解锁器_SAM解锁steam成就教程科普

    SAM全称为SteamAchievementManager 是一款一键解锁steam成就的工具 能够方便快捷的解锁steam游戏成就 图文使用教程 先登录steam 然后打开SAM读取你steam库存游戏 会出现这个界面 图1 登录stea
  • Nginx中if条件语句不支持proxy_set_header的解决方案

    转 Nginx中if条件语句不支持proxy set header的解决方案 CHEGVA 最近开发有个需求 需要通过一个域名加国家地区代码跳转到不同机房的服务 由于中间还要走一层ingress 需要设置下指定域名的头 ingress才能打
  • Node.js 安装与版本管理(nvm 的使用)

    安装 Node js Node js 诞生于 2009 年 5 月 截至今天 2022 年 3 月 26 号 的最新版本为 16 14 2 LTS 和 17 8 0 Current 可以去官网下载合适的版本 其中 LTS Long Term
  • 一)pytorch框架与环境搭建

    一 初识pytorch框架 为什么选择pytorch 活跃度高 逐渐形成完整的开发生态 资源多 动态图结构 运行速度较快 代码简洁 易于理解调试 简单 学习成本低 可能遇到的问题 深度学习框架太多要如何选择 开源代码很多家 但阅读修改起来非
  • WP7中,在后台c#代码中控制Grid

    有时候需要在后台代码中修改Grid布局 大概实现代码如下 代码很简单 如果在xmal中改过布局应该一看就明白 操作方法 创建一个默认页面 后台代码中加如下代码 public partial class Page3 PhoneApplicat
  • Global CORS configuration

    Global CORS configuration As an alternative to fine grained annotation based configuration you can also define some glob
  • 关于微信小程序:封装请求

    点这里 查看进阶版请求封装 拦截器 处理token过期之后的无感知登录 重新发起刚才未成功的请求 新建一个文件夹request 随便起 新建env js 2 1 在这里 配置接口地址的公共地址部分 方便后续引用 这里使用的接口呢都是自己模拟