微信小程序请求库的封装方法

2023-11-18

1.文档地址

微信官方文档:wx.request网络请求

2.项目使用

根目录下新建utils=>request.js,作为请求通用库

//接口地址
const DEV_URL = 'http://localhost:22667'
const PRODUCT_URL = 'http://xx.xx.xx.xx:22667'

//选用的接口地址,这行代码主要是方便URL地址的统一修改
let SERVER_URL = DEV_URL

//wx.request封装
let request = (method, url, data) => {
  return new Promise((resolve, reject) => {
  	//请求之前先定义请求头
    let headers = {}
    headers['Accept'] = 'application/json, text/plain, */*'
	//从storage中获取token,能拿到说明已登录
    wx.getStorage({
      key: 'token'
    }).then(res => {

	  //请求头中带上token
      headers['Authorization'] = res.data

      wx.request({
        url: SERVER_URL + url,
        method: method,
        header: headers,
        data: data,
        success: res => {
          if (res.data.resultCode === 200) {
            resolve(res)
          } else {
            reject(res)
          }
        },
        fail: err => {
          reject('请求失败!')
        }
      })

    }).catch(err => {
	  //因为无token,下面的代码可以跳转到登录页,也可以直接请求
      wx.request({
        url: SERVER_URL + url,
        method: method,
        header: headers,
        data: data,
        success: res => {
          if (res.data.resultCode === 200) {
            resolve(res)
          } else {
            reject(res)
          }
        },
        fail: err => {
          reject('请求失败!')
        }
      })

    })

  })
}

//封装上传文件至特定服务器的接口
let upload = (tempUrl, url) => {
  return new Promise((resolve, reject) => {
    let header = {}
    header['Accept'] = 'application/json, text/plain, */*'
    wx.getStorage({
      key: 'token'
    }).then(res => {
      let token = res.data
      header['Authorization'] = token
      wx.uploadFile({
        filePath: tempUrl,
        name: 'image',
        url: PRODUCT_URL + url,
        header: header,
        success(res) {
          let data = JSON.parse(res.data)
          if(data.resultCode === 200) {
            resolve(data.data)
          } else {
            reject(res.message)
          }
        },
        fail(err) {
          reject(err)
        }
      })
    }).catch(err => {})
  })
}


//对外暴露api,调用request/upload方法,这里的代码也可以单独写到api.js中
const api = {
  login: (data) => request('POST', '/api/v1/user/login', data),
  register: (data) => request('POST', '/api/v1/user/register', data),
  getProfile: () => request('GET', '/api/v1/user/profile'),
  goodsSearch: (data) => request('GET', '/api/v1/goods/search', data),
  getGoodsDetail: (goodsId) => request('GET', '/api/v1/goods/detail/' + goodsId),
  uploadImage: (tempUrl) => upload('POST', tempUrl, '/api/v1/tool/upload'),
  updateProfile: (data) => request('/api/v1/user/profile', data),
  addCart: (data) => request('POST', '/api/v1/shop-cart/shop-cart', data),
  getCart: (paegNumber) => request('GET', '/api/v1/shop-cart/shop-cart/page', paegNumber),
  getDefaultAddress: () => request('GET', '/api/v1/address/address/default'),
  getAddressList: () => request('GET', '/api/v1/address/address'),
  addAddress: (data) => request('POST', '/api/v1/address/address', data),
  settleOrder: (data) => request('POST', '/api/v1/order/saveOrder', data),
  getOrderList: () => request('GET', '/api/v1/order/order')
}

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

微信小程序请求库的封装方法 的相关文章

  • 使用 JavaScript 格式化日期

    JavaScript 中的日期格式有问题 这是我的函数代码 originalDate 2016 03 02 09 12 14 989522 var d new Date originalDate month d getMonth 1 day
  • 提升变量有目的吗?

    我最近学习了很多 JavaScript 并且一直在尝试理解提升变量的值 如果有的话 我 现在 明白JS是一个两遍系统 它编译然后执行 另外 我知道 var 关键字 存在 在它声明的词法范围中 因此如果在引擎为其赋值之前调用它 那么它是 未定
  • 在 onclick 事件上请求麦克风

    有一天 我偶然发现了这个 Javascript 录音机的例子 http webaudiodemos appspot com AudioRecorder index html http webaudiodemos appspot com Au
  • 循环遍历数组并删除项目,而不中断 for 循环

    我有以下 for 循环 当我使用splice 要删除一个项目 我发现 秒 未定义 我可以检查它是否未定义 但我觉得可能有一种更优雅的方法来做到这一点 我们的愿望是简单地删除一个项目并继续 for i 0 len Auction auctio
  • 如何使用 JavaScript 刷新页面?

    如何使用 JavaScript 刷新页面 Use location reload https developer mozilla org en US docs Web API Location reload 例如 每当元素带有以下内容时重新
  • 如何在 google.maps.event.addListener 中使用它

    以下示例有效 但是当我尝试传递参数并使用this在该功能不起作用 Working google maps event addListener markers i click showInfoWindow function showInfoW
  • 如何将“X-Content-Type-Options: nosniff”添加到我的网络服务器的所有响应标头中

    我正在运行一个 apache 网络服务器 我想将 X Content Type Options nosniff 添加到来自我的网络服务器的所有响应标头 我怎样才能做到这一点 是否可以通过更改 apache 配置文件来实现此目的 确保 mod
  • 如何将类型添加到 Vite 库构建中?

    我按照vite文档使用图书馆模式 https vitejs dev guide build html library mode我能够生成一个工作组件库 我创建了该项目vue ts预设 在我的组件中 我定义了道具及其类型 并使用了一些接口 但
  • fadeOut() 和slideUp() 同时进行?

    我已经发现jQuery 淡出然后滑动 https stackoverflow com questions 734554 jquery fadeout then slideup这很好 但不是那个 我怎么能够fadeOut and slideU
  • 冒泡可用于图像加载事件吗?

    我可以用吗 window addEventListner 某种程度上来说 我所有的图像都有一个display none 图像加载后 我想设置display inline 这样我就可以规范下载图像时显示的内容 在这种情况下 我无法预加载图像
  • 非法使用break语句; javascript

    当这个变量达到一定数量时 我希望循环停止 但我不断收到错误 未捕获的语法错误 非法的中断语句 function loop if isPlaying jet1 draw drawAllEnemies requestAnimFrame loop
  • Socket IO 服务器到服务器

    服务器是否可以使用 Socket IO 连接到另一个服务器并被视为客户端 并让它加入房间 接收 io sockets in lobby emit 和更多 第一个服务器也在监听连接 消息 嘿 Brad 下面是我的完整 js 应用程序 供参考
  • 在 Android Chrome 中隐藏 HTML5 音频/视频通知

    我的网络应用程序上有一个 HTML5 音频元素 在某些时候 我使用以下代码以编程方式停止播放 audioElement pause audioElement currentTime 0 播放音频时 我的 Android 设备 使用 Goog
  • 使用 ng-if 改变角度方向

    我想通过单击将方向从 rtl 更改为 ltr and in 设置 html
  • 如何从除自身之外的其他(blazor)库引用js/css文件?

    我如何引用 使用位于引用的 blazor 项目中的 css cs 文件 该文件与 host cshtml 中的当前项目不同 我的意思是
  • 如何为 jQuery 插件设置私有变量?

    我想创建一个简单的插件 它使用元素的文本作为默认值 或者您可以在调用插件时设置此值 但是 如果我不设置该值 并为多个元素调用插件 则默认值会成倍增加 function fn reText function options var setti
  • Keycloak-js updateToken(minValidity) 需要澄清

    我在Keycloak js中阅读了很多该方法的示例 但没有对以下方法进行明确的解释 updateToken minValidity number KeycloakPromise
  • Chrome 调试器注入 javascript

    我有这样的好奇心 是否可以以某种方式在我的页面中注入 javascript 并执行它并调试它 正如您在控制台中所做的那样 但在控制台中您无法暂停并观察变量 是否可以调试我通过控制台输入的代码 为什么无法调试通过 XHR 接收的代码 Than
  • Jquery 以编程方式更改

    文本

    编辑 解决方案是将其添加到个人资料页面而不是性别页面 profile live pageinit function event p pTest text localStorage getItem gender 我在列表视图中有一个带有一些文
  • $ 在 JQuery 中意味着什么

    在下面的 var obj one 1 two 2 three 3 four 4 five 5 each obj function i val console log val 这里是什么意思 是对象吗 是一个别名jQuery对象 函数 它充当

随机推荐

  • Matlab中绘制Bode图与单位阶跃响应图

    假设传递函数方程为 分析k分别为4 1 0 5时bode图和阶跃响应的不同 gt gt w 2 pi 50 gt gt num1 0 5 w 1 0 gt gt den1 1 0 5 w w 2 gt gt num2 1 w 1 0 gt
  • python爬虫——爬取快读小说app

    1 爬取结果 csv文件 出现了有两个表头 不明所以 无关大雅 2 使用fiddler4进行抓包 通过观察url 我们不难发现其中的规律 要实现进行分类抓取 需要更改url第一个数字 如下 https sc canrike com Cate
  • 用16进制的格式查看文件

    od Ax tx1 filename
  • 上传码云_vue-egg 简单的图片上传

    源码已上传码云 小朋友 vue egg 简单的图片上传 知乎视频 www zhihu com VSCode终端不能使用命令 惟愿安好ly 博客园 www cnblogs com 上传用的是 iview design 的 Upload 组件
  • Conda常见命令总结

    以下是常见的conda命令列表 conda create 创建新的虚拟环境 安装指定的包 conda activate 激活虚拟环境 conda deactivate 停用当前虚拟环境 conda list 列出已安装的包 conda se
  • 能连蓝牙键盘吗_300多的小键盘,颜值很能打,GANSS ALT71蓝牙双模机械键盘很香...

    关于键盘配列 你是60 70 80 90 还是100 党 反正上述这些配列差不多我都集齐了 GANSS ALT71正好填补了70 的空缺 这次分享录制了视频 wifi足的可以看这个 更换封面 05 58 视频尚未发布 暂时无法播放 wifi
  • 启动hadoop时候报错:localhost: ssh: Could not resolve hostname localhost: Temporary failure in name resolut...

    这个错误是由于配置文件没有配置好 解决方案如下 1 打开profile文件 vim etc profile 2 在文件最后加入的内容应该如下 高亮的两句一般是大家缺少的 export JAVA HOME usr java jdk expor
  • EasyPoi导入Excel中的图片,空指针异常

    官方文档 1 1 介绍 Powered by MinDoc 导入easypoi依赖 版本可以选择最新的
  • element table显示滚动条

    1 tableX为要显示滚动条的类名 2 显示横向滚动条 3 tableX el table scrollable x el table body wrapper 4 padding 0 0 5px 0 5 margin 0 0 5px 0
  • 【最新】手把手教你在VMware中安装Ubuntu虚拟机

    手把手教你在Vmware中安装Ubuntu虚拟机 一 下载VMware和Ubuntu系统官方镜像 1 下载VMware 2 下载Ubuntu系统官方镜像 二 安装VMware和Ubuntu虚拟机 1 安装VMware 2 安装Ubuntu镜
  • 电源学习总结(二)——线性稳压主要特点及原理

    文章目录 主要特点 内部结构 常见的三端线性稳压 AMS1117 主要特点 线性稳压最为突出的优点主要有成本低 噪声低 体积小 由于线性稳压结构简单 生产相对容易 因此其生产成本可以很低 同时其需要的外围器件也很少 一般只需要在输入端和输出
  • 【Python】教你写一个一键上传git的脚本(打包成exe)

    本篇博客来教你用Python写一个简单的git自动上传脚本 前言 为什么需要一个这样的东西 有的时候 我的学习代码其实没啥好commit的 写一个自动上传的脚本 就可以自动执行完所有的命令 而不需要自己手动进行git三板斧操作 项目代码已开
  • unplugin-vue-components 源码原理分析

    unplugin vue components 是一款按需自动导入Vue组件的库 支持 Vue2 和 Vue3 同时支持组件和指令 使用此插件库后 不再需要手动导入组件 插件会自动识别按需导入组件以及对应样式 我们只需要像全局组件那样使用即
  • 【笔记】SemGCN

    一 论文总结 1 1 核心贡献 提出了一种改进的图卷积操作 称为语义图卷积 SemGConv 它源自cnn 其关键思想是学习图中暗示的边的信道权值 然后将它们与核矩阵结合起来 这大大提高了图卷积的能力 其次 我们引入了SemGCN 其中Se
  • Unity PlayerPrefs(数据持久化)

    PlayerPrefs Unity3D中的数据持久化是以键值的形式存储的 可以看作是一个字典 Unity3D中值是通过键名来读取的 当值不存在时 返回默认值 目前Unity3D中只支持int string float三种数据类型的读取 参考
  • android开发工具!Android性能优化常见问题,灵魂拷问

    前言 今年上半年其实就已经有了换工作的想法 奈何疫情原因和岗位缩减 加之信心不足 到六月底投递了百度的Android岗位 本以为像我这种非211 985没工作经验的渣渣只能被直接pass 结果却意外的收到了电话 真是受宠若惊 经过电面 技术
  • 51单片机入学第八课——8*8点阵屏

    文章目录 LED点阵屏 点阵屏电路图 74HC595芯片 串入并出 使用方法 编程 点亮一个点 显示汉字 PCtoLCD 2002 编写代码 总结 LED点阵屏 LED点阵屏和数码管工作都是是靠二极管发光 但工作原理与矩阵键盘有些类似 在后
  • springboot2.0整合logback日志(详细)

    一 近期自己的项目想要一个记录日志的功能 而springboot本身就内置了日志功能 然而想要输入想要的日志 并且输出到磁盘 然后按天归档 或者日志的切分什么的 自带的日志仅仅具有简单的功能 百度了一番 总结如下 适合大多数的应用场景 二
  • python线程池ThreadPoolExecutor使用

    假设我们必须多线程任务创建大量线程 由于线程太多 因此可能会有很多性能问题 这在计算上会是最昂贵的 一个主要问题可能是吞吐量受限 我们可以通过创建一个线程池来解决这个问题 一个线程池可以被定义为一组预先实例化和空闲的线程 它们随时可以开始工
  • 微信小程序请求库的封装方法

    1 文档地址 微信官方文档 wx request网络请求 2 项目使用 根目录下新建utils gt request js 作为请求通用库 接口地址 const DEV URL http localhost 22667 const PROD