小程序获取后台数据方法封装

2023-11-05

前言:

       实际再很早之前就有想再小程序里面做和vue中的axios封装的方法的操作,现在终于可以把自己的理解和整理封装整理下。

目录:

实现步骤:

1、目录结构,总共两个文件,http.js是对 wx.request 和 wx.uploadFile 的封装,可以实现普通请求后台和上传请求后台的调用

2、具体文件代码:

(1)http.js

源码:

(2)index.js 定义你的调用方法

源码:

3、封装后以后。我们在页面的调用


实现步骤:

1、目录结构,总共两个文件,http.js是对 wx.request 和 wx.uploadFile 的封装,可以实现普通请求后台和上传请求后台的调用

2、具体文件代码:

(1)http.js

*定义后台返回报错类型,根据后台的code来定义属于自己的校验信息

*正常请求后台的后台方法,跟我们vue相似

  •           url == 路径,
  •          methods == 请求方法 ,
  •          data == 参数(小程序只有这一个传参方法,没有我们vue的params)
  •          header == 请求头

*上传 后台 - 更多api请往最下面看

  •           url == 路径,
  •          methods == 请求方法 ,
  •          header == 请求头
  •          filePath == 要上传文件资源的路径 (本地路径)
  •          name == 文件对应的 key,开发者在服务端可以通过这个 key 获取文件的二进制内容
  •          formData == HTTP 请求中其他额外的 form data   ( 这里才是上传给后台加别的参数的地方 )

源码:

/*
* @Author: zwh
* @Date:  2020.6.23
*/
import { config } from '../config/index.js'

const tips = {
    1: '抱歉,出现了一个错误',
    205: '暂无数据!',
    300:'页面重定向,注意信息安全!',
    400:'语法格式有误!,请检查错误输入',
    401: '登录失败!',
    404:'页面资源错误!',
    500:'服务器错误!',

    10301:'用户不存在',
    11702:'手机经纬度获取失败',
    11703:'距离偏差太大',
    11704:'超时',


}

class HTTP {
    request({ url, data = {}, method = 'GET',type='' }) {
        return new Promise((resolve, reject) => {
            this._request(url, resolve, reject, data, method,type)
        })
    }
    _request(url, resolve, reject, data = {}, method = 'GET',type='') {
        try {
            var token = wx.getStorageSync('token')
            let header = {};
            if (token) {
                header = {
                    'X-Access-Mobile':token
                }
            }

            if(type == ''){
                //正常请求后台
                wx.request({
                    url: config.api_base_url + url,
                    method: method,
                    data: data,
                    header:header,
                    success: (res) => {
                        const code = res.statusCode.toString()
                        if (code.startsWith('2')) { // 一般情况下正确的请求结果是以2开头的(200)
                            resolve(res.data)

                        }else {
                            reject(res)
                            const error_code = res.data.code
                            this._show_error(error_code, res.data)

                        }
                    },
                    fail: (err) => {
                        reject(err)
                        this._show_error(1)
                    }
                })
            }else if(type == 'upload'){
                //上传请求后台
                wx.uploadFile({
                    url: config.api_base_url + url,
                    method: method,
                    header:header,
                    filePath:data.filePath,
                    name:data.name,
                    formData:data.formData,
                    success: (res) => {
                        const code = res.statusCode.toString()
                        if (code.startsWith('2')) { // 一般情况下正确的请求结果是以2开头的(200)
                            resolve(res.data)

                        }else {
                            reject(res)
                            let data =  JSON.parse(res.data);
                            const error_code = data.code;
                            this._show_error(error_code, data)

                        }
                    },
                    fail: (err) => {
                        reject(err)
                        this._show_error(1)
                    }
                })

            }



        } catch (e) {
            console.log(e);
        }


    }
    /**
     * 处理报错
     * */
    _show_error(error_code,data) {
        if (!error_code) {
            error_code = 1;//默认报错
        }
        const tip = tips[error_code] //= data.data
        wx.showToast({
            title: tip ? tip : tips[1],  // tips内没找到对应的错误代码时,使用1代替
            icon: 'none',
            duration: 2000
        })
    }

}

export { HTTP }

(2)index.js 定义你的调用方法

*正常请求:

*上传:

源码:


import { HTTP } from './http.js'

class DemoModel extends HTTP {
    // 登录-获取用户session_key
    getUserKey(data) {
        return this.request({ url: '/login', data: data, method: 'GET' })
    }
    // 获取当前用户签到信息
    getSignData(data) {
        return this.request({ url: '/employee', data: data, method: 'GET' })
    }
    // 获取手机号
    getPhone(data) {
        return this.request({ url: '/decry', data: data, method: 'PUT' })
    }



    /**
     * 上传
     * */
    //上传图片
    uploadImg(data){
        return this.request({
            url: '/sign',
            data: data,
            method: 'POST',
            type:'upload'
        })
    }


}

export {
    DemoModel
}

3、封装后以后。我们在页面的调用

index.js中使用:

import { DemoModel } from '../api/index.js'

const apiModel = new DemoModel();

正常操作:

              let str = {
                    code:res.code,
                }
                apiModel.getUserKey(str).then((res)=>{
                    let str = {
                        openid: res.openid,
                        session_key:res.session_key
                    }
                    this.setData({
                        userInfo:str
                    })
                    wx.setStorageSync('userInfo',str);
                    if(tit==1){
                        this.deciyption(res.session_key,encryptedDataStr,iv);
                    }
                }).catch(err=>{
                    console.log(err);
                })

上传操作:

                let str = {
                    filePath: tempFilePaths,
                    name: 'images',
                    formData: {
                        lon       :  that.data.map.longitude,
                        lat       :  that.data.map.latitude,
                        lat1       :  app.globalData.y_lat,
                        lon1       :   app.globalData.y_lon,
                        person_id :  that.data.user.person_id,
                        type      :  that.data.user.types=='3'?1:2,//3是上班,4是下班
                        location  :  that.data.map.title,
                    },
                }
                apiModel.uploadImg(str).then(res=>{
                    wx.hideLoading()
                    that.getSignData();//获取当前的签到信息
                    wx.showToast({
                        title: '打卡成功',
                        icon: 'success',
                        duration: 2000
                    })
                })

到此结束!

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

小程序获取后台数据方法封装 的相关文章

  • Open3D 点云均值滤波

    目录 一 算法原理 1 均值滤波 2 参考文献 二 代码实现 三 结果展示 本文由CSDN点云侠原创 原文链接 如果你不是在点云侠的博客中看到该文章 那么此处便是不要脸的爬虫 一 算法原理 1 均值滤波 对待处理的当前采样点 选择一个模板
  • 区块链能否助力重塑物流业?

    去年年底 就有部分技术人士看准了市场潜力巨大的快递市场 提出 用区块链技术整顿快递行业 的观点 引发热议 那么区块链到底能否拯救快递行业 基于区块链技术具有去中心化 集体维护 高度透明 去信任 匿名 不可篡改 可追溯等显著特点 可以在以下快
  • 【转】do{...}while(0)的意义和用法

    转自 http blogread cn it article 5907 linux内核和其他一些开源的代码中 经常会遇到这样的代码 do while 0 这样的代码一看就不是一个循环 do while表面上在这里一点意义都没有 那么为什么要

随机推荐

  • 2020软件测试工程师面试题汇总(内含答案)-看完BATJ面试官对你竖起大拇指!

    2020最新软件测试面试题汇总 内附参考答案 测试技术面试题 1 什么是兼容性测试 兼容性测试侧重哪些方面 参考答案 兼容测试主要是检查软件在不同的硬件平台 软件平台上是否可以正常的运行 即是通常说的软件的可移植性 兼容的类型 如果细分的话
  • Spring MVC 学习总结(四)——校验与文件上传

    Spring MVC不仅是在架构上改变了项目 使代码变得可复用 可维护与可扩展 其实在功能上也加强了不少 验证与文件上传是许多项目中不可缺少的一部分 在项目中验证非常重要 首先是安全性考虑 如防止注入攻击 XSS等 其次还可以确保数据的完整
  • 【Python基础】python必会的10个知识点

    来源 Towards Data Science 作者 Soner Yildirim 编译 VK Python在数据科学生态系统中占据主导地位 我认为 占据主导地位的两大原因是相对容易学习和数据科学库的丰富选择 Python是一种通用语言 因
  • android main system log,Log中'main', 'system', 'radio', 'events'以及android log分析

    1log文件分类简介 实时打印 的主要有 logcat main logcat radio logcat events tcpdump 还有高通平台的还会有 QXDM 日志 状态信息 的有 adb shell cat proc kmsg a
  • vlan中ACL inbound与outbound详解

    关键字 华为ACL配置 Cisco ACL配置 Vlan ACL配置 ACL一般有两种应用场景 应用到交换机物理端口和应用到Vlan 场景一 应用到交换机物理端口 网络拓扑 PC连接在交换机的Gig0 0 1端口 实现目的 禁止在PC上能够
  • 在python中使用nohup命令说明

    nohup功能 nohup 是 no hang up 的缩写 就是不挂断的意思 如果你正在运行一个进程 而且你觉得在退出帐户时该进程还不会结束 那么可以使用nohup命令 该命令可以在你退出帐户 关闭终端之后继续运行相应的进程 1 代码 n
  • 第七讲:构造函数与析构函数

    第七讲 构造函数与析构函数 本讲基本要求 掌握 构造和析构函数概念 初始化 作用 理解 构造构函的重载 带参数的构造函数两种表达格式 重点 难点 构造和析构函数概念 初始化 作用 通过前两章的学习 我们已经对类和对象有了初步的了解 在本章中
  • python期末复习提纲

    1 注释 变量命名 缩进 2 数据输入字符串函数input 注意结果为字符串 3 字符串解析函数eval的使用 特别注意输入字符串可直接解析为组合数据类型 理解 将字符串类型转化为现有组合类型 list dict set 或现有定义的变量等
  • 01-Embedding层是什么?怎么理解?简单的评论情感分类实验

    文章目录 1 One hot编码 2 Embedding 3 语义理解中Embedding意义 4 文本评论 代码实验 1 One hot编码 要知道embedding的作用 首先要了解独热编码 one hot 假设现在有如下对应关系 那么
  • 2016年下半年信息安全工程师上午选择题及解析

    以下有关信息安全管理员职责的叙述 不正确的是 A 信息安全管理员应该对网络的总体安全布局进行规划 B 信息安全管理员应该对信息系统安全事件进行处理 C 信息安全管理员应该负责为用户编写安全应用程序 D 信息安全管理员应该对安全设备进行优化配
  • SSM基本系统架构设计(Spring、Spring MVC 、MyBatis)

    系统根据功能的不同 项目结构可以划分为以下几个层次 1 持久对象层 也称持久层或持久化层 该层由若干持久化类 实体类 组成 2 数据访问层 DAO 层 该层由若干DAO 接口和MyBatis 映射文件组成 接口的名称统一以Dao 结尾 且M
  • 总汇nexus 服务启动异常

    总汇nexus 服务启动异常 故障描述1 故障描述2 故障描述3 备份准备修复的数据库 故障描述1 nexus oss 3 一直运行得没什么问题 忽然发现运行特别慢然后到服务器去重启 莫名其妙一直启动失败 查看日志发现如下报错信息 2022
  • C51单片机晶振频率、时钟周期、状态周期、机器周期、指令周期和总线周期的关系

    一 晶振频率 1 英文全称 frequency oscillate 2 定义 晶体振荡器的固有频率 不能改变 3 如果外接12Mhz晶振 则晶振频率12Mhz 二 时钟周期 1 英文全称 Clock Cycle 为晶振频率12Mhz倒数 2
  • 面试题computed和watch的区别

    computed和watch的区别 1 英文翻译成中文 computed就是计算属性的意思 是用来计算出一个值的 这个值 我们在调用的时候 1 不需要加括号 2 根据依赖缓存 watch就是监听的意思 1 immediat表示是否第一次执行
  • Prometheus on k8s 部署与实战操作进阶篇

    文章目录 一 概述 二 常见的几款监控工具 1 kube prometheus 和 kube prometheus stack 区别 2 Prometheus Operator 和kube prometheus 或 kube prometh
  • openpose人体姿态估计

    参考博客 Openpose驾驶员危险驾驶检测 抽烟打电话 人体姿态识别模型 openpose OpenPose人体姿态识别项目是美国卡耐基梅隆大学 CMU 基于卷积神经网络和监督学习并以caffe为框架开发的开源库 可以实现人体动作 面部表
  • Spring MVC实例(增删改查)

    本文转载自 https www cnblogs com beast king p 5786752 html 作者 beast king 转载请注明该声明 数据库配置文件application context jdbc xml
  • 计算机视觉中自注意力构建块的PyTorch实现

    作者 AI Summer 编译 ronghuaiyang 导读 一个非常好用的git仓库 封装了非常全面的计算机视觉中的自注意力构建块 直接调用 无需重复造轮子了 git仓库地址 https github com The AI Summer
  • 深度学习(20)—— ConvNext 使用

    深度学习 20 ConvNext 使用 本篇主要使用convnext做分类任务 其中使用convnext tiny 其主要有5块 stage0 stage1 stage2 stage3 head 文章目录 深度学习 20 ConvNext
  • 小程序获取后台数据方法封装

    前言 实际再很早之前就有想再小程序里面做和vue中的axios封装的方法的操作 现在终于可以把自己的理解和整理封装整理下 目录 实现步骤 1 目录结构 总共两个文件 http js是对 wx request 和 wx uploadFile