小程序系统API 调用


一、网络请求API 和封装  wx.request (Object object)

​​​​​​ RequestTask | 微信开放文档

1.1 API 参数

1.2 API 使用

 

 1.3 网络请求--API 封装

  • 使用 promise 包装成函数
    export function MyRequest(options) {
      return new Promise((resolve, reject) => {
        wx.request({ 
          ...options, 
          success: (res) => {
            resolve(res.data)
          },
          fail: reject
        })
      })
    }
  • 封装成类 ,再实例化  (封装 baseURL 、get、post
    class MyRequest {
      constructor(baseURL) {
        this.baseURL = baseURL
      }
      request(options) {
        const { url } = options
        return new Promise((resolve, reject) => {
          wx.request({
            ...options,
            url: this.baseURL + url,
            success: (res) => {
              resolve(res.data)
            },
            fail: (err) => {
              console.log("err:", err);
            }
          })
        })
      }
      get(options) {
        return this.request({ ...options, method: "get" })
      }
      post(options) {
        return this.request({ ...options, method: "post" })
      }
    }
    
    export const myReqInstance = new MyRequest("http://codercba.com:1888/api")
  • 使用封装的函数和类
import { myRequest, myReqInstance } from "../../service/index"

Page({
  data: {
    allCities: {},
    houselist: [],
    currentPage: 1
  },
  async onLoad() {
    // 1.网络请求基本使用
    // wx.request({
    //   url: "http://codercba.com:1888/api/city/all",
    //   success: (res) => {
    //     const data = res.data.data
    //     this.setData({ allCities: data })
    //   },
    //   fail: (err) => {
    //     console.log("err:", err);
    //   }
    // })

    // wx.request({
    //   url: 'http://codercba.com:1888/api/home/houselist',
    //   data: {
    //     page: 1
    //   },
    //   success: (res) => {
    //     const data = res.data.data
    //     this.setData({ houselist: data })
    //   }
    // })

    // 2.使用封装的函数
    // myRequest({ 
    //   url: "http://codercba.com:1888/api/city/all" 
    // }).then(res => {
    //   this.setData({ allCities: res.data })
    // })

    // myRequest({
    //   url: "http://codercba.com:1888/api/home/houselist",
    //   data: {
    //     page: 1
    //   }
    // }).then(res => {
    //   this.setData({ houselist: res.data })
    // })

    // 3.await/async 书写方便,但性能不高,会阻塞后面的网络请求
    // const cityRes = await myRequest({ 
    //   url: "http://codercba.com:1888/api/city/all" 
    // })
    // this.setData({ allCities: cityRes.data })

    // const houseRes = await myRequest({
    //   url: "http://codercba.com:1888/api/home/houselist",
    //   data: { page: 1 }
    // })
    // this.setData({ houselist: houseRes.data })

    // 4.将请求封装到一个单独函数中(推荐) 异步函数执行不会阻塞后面的运行
    this.getCityData()
    this.getHouselistData()

    // 5.使用类的实例发送请求
    myReqInstance.get({
      url: "/city/all"
    }).then(res => {
      console.log(res);
    })
  },

  async getCityData() {
    const cityRes = await myRequest({ 
      url: "http://codercba.com:1888/api/city/all" 
    })
    this.setData({ allCities: cityRes.data })
  },
  async getHouselistData() {
    const houseRes = await myRequest({
      url: "http://codercba.com:1888/api/home/houselist",
      data: { page: this.data.currentPage }
    })
    const finalHouseList = [...this.data.houselist, ...houseRes.data]
    this.setData({ houselist: finalHouseList })
    // 思考: 为什么这里不需要setData?
    // 修改currentPage数据,并不需要页面刷新
    this.data.currentPage++
  },
//上拉加载更多
  onReachBottom() {
    this.getHouselistData()
  }
})

二、展示弹窗和页面分享

2.1  展示弹窗

  • showToast 显示消息提示框 

wx.showToast(Object object) | 微信开放文档

  •  showModal 显示模态对话框

wx.showModal(Object object) | 微信开放文档

  •  showLoading  显示 loading 提示框。 需主动调用 wx.hideLoading 关闭提示框

wx.showLoading(Object object) | 微信开放文档

  •  showActionSheet 显示操作菜单

wx.showActionSheet(Object object) | 微信开放文档

注意

  • wx.showLoading 和  wx.showToast 同时只能显示一个
  • wx.showToast 应与  wx.hideToast 配对使用

2.2 页面分享

  onShareAppMessage() {
    return {
      title: "旅途的内容",
      path: "/pages/favor/favor",
      imageUrl: "/assets/nhlt.jpg"
    }
  },

三、设备信息和位置信息

3.1 获取设备信息  wx.getSystemInfo(Object object) | 微信开放文档

wx.getSystemInfo({
  success (res) {
    console.log(res.model)
    console.log(res.pixelRatio)
    console.log(res.windowWidth)
    console.log(res.windowHeight)
    console.log(res.language)
    console.log(res.version)
    console.log(res.platform)
  }
})

3.2 获取位置信息  wx.getLocation(Object object) | 微信开放文档

获取用户授权   全局配置 | 微信开放文档

四、小程序Storage 存储 

encryptBoolean默认值false非必填
是否开启加密存储。只有异步的 setStorage 接口支持开启加密存储。开启后,将会对 data 使用 AES128 加密,接口回调耗时将会增加。若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true。此外,由于加密后的数据会比原始数据膨胀1.4倍,因此开启 encrypt 的情况下,单个 key 允许存储的最大数据长度为 0.7MB,所有数据存储上限为 7.1MB

五、页面跳转和数据传递

5.1 页面跳转

5.1.1  navigator 组件   navigator | 微信开放文档

5.1.2 wx 的 API

路由跳转API功能描述
  • wx.switchTab
跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
  • wx.reLaunch
关闭所有页面,打开到应用内的某个页面
  • wx.redirectTo

关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。

  • wx.navigateTo
保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用  wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层。
  • wx.navigateBack

关闭当前页面,返回上一页面或多级页面。可通过  getCurrentPages 获取当前的页面栈,决定需要返回几层。

 5.2 数据传递

 

给上一级页面传递数据

1. 获取到上一个页面的实例, 通过setData给上一个页面设置数据  

  • 将返回上一级页面的数据传递过程写在 onUnload() 中,可以将小程序自带的返回导航功能重写实现参数传递
  • 不要在 App.onLaunch 的时候调用 getCurrentPages(),此时 page 还没有生成。
  • 不要尝试修改页面栈,会导致路由以及页面状态错误。
  • getCurrentPages 获取当前页面栈。数组中第一个元素为首页,最后一个元素为当前页

2. 回调events的函数  EventChannel | 微信开放文档 

给下一级页面传递数据

  • 通过 url 中的query字段进行页面间传参,在下一级 Page 的onLoad 的参数options 中获取打开当前页面路径中的参数
  • events 参数  EventChannel.on(string eventName, EventCallback fn)
Page({
  data: {
    name: "kobe",
    age: 30,
    message: "哈哈哈"
  },
  onNavTap() {
    const name = this.data.name
    const age = this.data.age

    // 页面导航操作
    wx.navigateTo({
      // 跳转的过程, 传递一些参数过去
      url: `/pages2/detail/detail?name=${name}&age=${age}`,
      events: {
        backEvent(data) {
          console.log("back:", data);
        },
        coderwhy(data) {
          console.log("why:", data);
        }
      }
    })
  }
})

Page({
  data: {
    name: "",
    age: 0
  },
 // onLoad 的参数中获取打开当前页面路径中的参数。
  onLoad(options) {
    console.log(options);
    const name = options.name
    const age = options.age
    this.setData({ name, age })

    // const eventChannel = this.getOpenerEventChannel()
  },

  onBackTap() {
    // 1.返回导航
    wx.navigateBack()

    // 2.方式一: 给上一级的页面传递数据
    // 2.1. 获取到上一个页面的实例
    // const pages = getCurrentPages()
    // const prePage = pages[pages.length-2]

    // // 2.2.通过setData给上一个页面设置数据
    // prePage.setData({ message: "呵呵呵" })

    // 3.方式二: 回调events的函数
    // 3.1. 拿到eventChannel
    const eventChannel = this.getOpenerEventChannel()

    // 3.2. 通过eventChannel回调函数
    eventChannel.emit("backEvent", { name: "back", age: 111 })
    eventChannel.emit("coderwhy", { name: "why", age: 10 })
  },
  onUnload() {
    // // 2.1. 获取到上一个页面的实例
    // const pages = getCurrentPages()
    // const prePage = pages[pages.length-2]

    // // 2.2.通过setData给上一个页面设置数据
    // prePage.setData({ message: "呵呵呵" })
  }
})

六. 小程序登录流程演练

  • 小程序登录流程 :

    1.通过wx.login()获取code

    2.将这个code发送给后端,后端会返回一个token,这个token将作为身份的唯一标识

    3.将token通过 wx.setStorageSync() 保存在本地存储

    4.用户下次进入页面时,会先通过wx.getStorageSync() 方法判断token是否有值且未过期,如果有值且未过期,则可以请求其它数据,如果没有值或者token失效,则进行登录操作

Page({
  // onLoad登录的流程
  async onLoad() {
    // 1.获取token, 判断token是否有值
    const token = wx.getStorageSync('token') || ""

    // 2.判断token是否过期
    const res = await myLoginReqInstance.post({
      url: "/auth",
      header: {
        token: token
      }
    })
    // console.log(res);

    // 2.如果token有值
    if (token && res.message === "已登录") {
      console.log("请求其他的数据");
    } else {
      this.handleLogin()
    }
  },

  async handleLogin() {
    // 1.获取code
    const code = await getCode()

    // 2.使用code换取token
    const res = await myLoginReqInstance.post({
      url: "/login",
      data: { code }
    })

    // 3.保存token
    wx.setStorageSync('token', res.token)
  }

  // handleLogin() {
  //   // 1.获取code
  //   wx.login({
  //     success: (res) => {
  //       const code = res.code

  //       // 2.将这个code发送自己的服务器(后端)
  //       wx.request({
  //         url: "http://123.207.32.32:3000/login",
  //         data: {
  //           code
  //         },
  //         method: "post",
  //         success: (res) => {
  //           const token = res.data.token
  //           wx.setStorageSync('token', token)
  //         }
  //       })
  //     }
  //   })
  // }
})

 封装 getCode

 //  /service/login.js
export function getCode() {
  return new Promise((resolve, reject) => {
    wx.login({
      success: (res) => {
        resolve(res.code)
      },
      fail: reject
    })
  })
}

提拉米苏爱拿铁
关注 关注
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序之安全调用外部API
lmz010930_的博客
12-15 1万+
(一)使用微信小程序调用API注意事项: 要使用wx.request有两个前提条件: 1 . 要在后台配置request合法域名 2 . 该域名要走https,不能走http 小程序调用第三方API接口可以分为两种情况 一种是小程序前端调用第三方API,直接用wx.request即可,不过需要注意的是需要开通安全域名 另一种是在服务端调用第三方API小程序端用服务端,比如使用小程序云开发,在云函数中请求第三方API,然后在小程序调用云函数,这种情况下通常不需要开通安全域名,而且特别适合对安
小程序云函数调用API接口的方法
01-03
本文实例为大家分享了小程序云函数调用API接口的具体代码,供大家参考,具体内容如下 以下例子是调用小程序官方的API,如何调用API来进行对内容的安全检测: 第一步:新建一个文件名为msgCheck的Node.js的云函数,...
微信小程序API应用
m0_74842053的博客
04-08 3274
1.网络API•(1)(2)(3)
微信小程序常用API(总结分享)
最新发布
忧郁的蛋的专栏
07-30 1105
本篇文章给大家带来了关于的相关知识,其中主要总结了一些常用的api,下面一起来看一下,希望对大家有帮助。
微信小程序 | 小程序系统API调用
热门推荐
CoderHing的博客~
12-31 2万+
转发按钮(button 组件 open-type="share")unionid(在微信中,判断 是不是同一个用户 登录不同的产品)🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️。🖥️ 微信小程序专栏:小程序系统API调用。🧑‍💼 个人简介:一个不甘平庸的平凡人🍬。👉 你的一键三连是我更新的最大动力❤️。return 一个 Object,不能跳到tabbar页面;在app.json中配置。右上角菜单“转发”按钮。返回上一页面或多级页面。粘性和产品的停留时间。
小程序调用API服务
aiee的博客
03-02 2521
1、配置API服务地址 登录微信公众平台:https://mp.weixin.qq.com/ 开发管理->开发设置->服务器域名,设置request合法域名,就是你的API服务地址的域名,目前只支持https 2、封装API调用方法 export function fetch(data, callback){ console.log(data) wx.request({ url: "https://***", //这里填写你的接口路径,需在微信公众平台配置过 heade.
小程序 API 接口做法
JumpingVR的博客
06-29 409
小程序 API 接口做法 以下代码假设在config/api.js中 const url="url" # http 接口 module.exports={ # 这段语句表明可以被索引 aaa:url+"sub_url", # 接口的 Handler } 索引时使用代码如下: 以下代码假设在utils/util.js中 var api = require('../config/api.js'); # api.aaa 表示这个接口全称 ...
微信小程序api接口调用用封装
01-03
微信小程序api接口调用用封装 1. 在 02-项目 下新建request目录及index.js文件 1.1 02-项目\request\index.js  1.2.index.js // 同时发送异步代码的次数 let ajaxTimes=0; export const request=(params)=>{ //...
微信小程序demo:猜谜,易源免费API调用
03-15
标题中的“微信小程序demo:猜谜,易源免费API调用”揭示了这个项目的核心内容。这是一款基于微信小程序开发的猜谜游戏,利用了易源提供的免费API接口来实现其功能。微信小程序是一种轻量级的应用开发平台,它允许...
十分钟快速上手Spring Boot与微信小程序API接口调用,快速开发小程序后端服务
qq_41737694的博客
01-31 8347
微信小程序作为一种轻量级的应用形式,得到了越来越广泛的应用。在实际开发中,我们可能需要在微信小程序和后端服务器之间进行数据交互,以实现复杂的业务逻辑。本文将介绍如何使用Spring Boot框架与微信小程序API接口进行调用,实现跨平台业务逻辑处理的功能。
小程序简单Api
07-14
小程序的后台数据Api 有利于学习后台数据交互
小程序API接口正确源码
04-12
小程序API接口正确源码,方便您的学习和使用,笑话API接口众多,都可以调用
微信小程序接口API完整示例
07-22
微信小程序接口API完整示例,基本包括了官方文档里的所有组件和接口 微信官网小程序组件和接口使用演示完整源代码 亲测可用!
小程序 API
青蛙king的博客
08-07 581
目录 一、事件监听 API 二、同步 API 三、异步 API 四、API大全 五、api的私人订制 一、事件监听 API 以on开头的 API 用来监听某个事件是否触发。 二、同步 API 以Sync结尾的 API 都是同步 API。 三、异步 API 大多数 API 都是异步 API。 四、API大全 请戳这里:https://deve...
小程序原生 API
认真!
03-01 1149
小程序中也能够像网页一样支持本地数据缓存,本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在用户关闭小程序重新打开时可以恢复之前的状态。其包含以下 8个主要的 API。但一般我们在开发阶段时,处于开发阶段的服务器接口可能还没部署到对应的域名下,经常会通过另一个域名来进行开发调试,考虑到这一点,为了方便开发者进行开发调试,开发者工具、小程序的开发版和小程序的体验版在某些情况下允许。
小程序----API
emmmm.....
04-22 828
文章目录1 小程序 API 概述2 小程序 API 的 3 大分类 1 小程序 API 概述 小程序中的 API 是由宿主环境提供的,通过这些丰富的小程序 API,开发者可以方便的调用微信提供的能力,例如:获取用户信息、本地存储、支付功能等。 2 小程序 API 的 3 大分类 小程序官方把 API 分为了如下 3 大类: 事件监听 API 特点:以 on 开头,用来监听某些事件的触发 举例:wx.onWindowResize(function callback) 监听窗口尺寸变化的事件 同步
微信小程序调用API接口
麦当劳比肯德基好吃
09-11 5211
首先去果创云之类的API调用的网站找到你想调用API 以大学查询接口为例 复制API接口,然后要现在第一个?前面加上appkey,然后name可以换成变量,最后的10是显示的条数,也可以改。 最后效果是可以查询你想要查询的学校。并且点击可以进入其官网。 效果图: one2.js // pages/one2/one2.js Page({ /** * 页面的初始数据 */ data: { schoolInfos:[], ...
小程序请求API接口,网络请求封装
极客小寨的博客
06-24 896
概述 前几日关注的用户问我有没有封装好的小程序网络请求接口,那么小程序请求API接口,网络请求封装,我们应该怎么编写呢? 今天我们说下小程序请求API接口的实现,然后就分享这样的小案例。希望对大家有所帮助。 不多说了,二当家今天终于不用上图啦! 我封装的request的代码 /** * @desc API请求接口类封装 * @author ge...
写文章

热门文章

  • vue3 集成 Element-Plus之全局导入/按需导入 15805
  • Vue2 、vue3 监听对象的变化 5148
  • Vue3学习之全局事件总线mitt 4761
  • 猜数字游戏JavaScript 3480
  • Git 开发分支合并到develop分支用法 3034

分类专栏

  • Node.js 7篇
  • 小程序 4篇
  • JS 8篇
  • vue3 2篇

最新评论

  • vue3 集成 Element-Plus之全局导入/按需导入

    美酒没故事°: naiveUI也挺不错,就是生态没有这个好

  • 登录凭证cookie、session、token的Koa实现

    m0_59553133: 好熟悉的代码 刚好在看coderwhy的视频

  • vue3 集成 Element-Plus之全局导入/按需导入

    Arlruby: 按需引入配完之后好像就不能使用element的全局方法了

  • 登录凭证cookie、session、token的Koa实现

    CSDN-Ada助手: 非常感谢您分享“登录凭证cookie、session、token的Koa实现”这篇博客!这篇文章非常有价值,让读者深入了解如何在Koa中实现不同类型的登录凭证。希望您能继续分享您的技术知识和经验。针对您的技术方向,我建议您可以写一篇关于“Koa中如何使用JWT实现认证和授权”的博客,这是现代web应用程序中非常流行的一种方法。期待您的更多精彩文章! 2023年博客之星「城市赛道」年中评选已开启(https://activity.csdn.net/creatActivity?id=10470&utm_source=blog_comment_city ), 博主的原力值在所在城市已经名列前茅,持续创作就有机会成为所在城市的 TOP1 博主(https://bbs.csdn.net/forums/blogstar2023?typeId=3152981&utm_source=blog_comment_city),更有丰厚奖品等你来拿~。

  • 品优购静态页面--列表页

    早间芦花: 没有清除浮动吗

最新文章

  • 登录凭证cookie、session、token的Koa实现
  • Node操作MySQL
  • SQL语句
2023年21篇
2022年16篇
2021年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司沈阳网站制作优化技巧移动怎么优化网站毕节seo网站优化公司珠海网站优化哪家快临沂网站优化联系企汇优网络做推罗湖健康网站优化哪个好网站优化描述设置快速优化网站纟云95速纟捷哪个网站比较容易做优化永城专业网站优化推广哪家好成华区企业网站优化长宁区官方网站优化定制方案网站快速优化周到火5星放心辽宁口碑好的网站设计优化网站seo优化 sit江北宁波网站优化咸宁网站优化推广公司随州本地网站优化公司排名沁阳网站自然优化哪家有实力温州优化网站公司一个网站栏目页单一能优化嘛巩义网站关键词优化服务怎么选广州网站优化找腾维网云梦县网站排名优化怎么样智能网站优化灌南县网站seo优化排名所有的网站都适合优化吗海南省定制版网站优化项城优化网站排名收费情况漯河企业网站优化方案歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化