评论
新手:云函数发起请求集合实现数据分页

新手:云函数发起请求集合实现数据分页

其实真正的送别没有长亭古道,没有劝君更近一杯酒,就是在一个和平时一样的清晨,他留在昨天

新手:云函数发起请求集合实现数据分页

Fr Cover事情之后又回归微信云开发的学习,之前学集合的增删改查;今天学习如果使用云函数发起请求集合实现数据分页

为什么使用云函数发起请求?
原本我们应该只需要在相对应的页面发起对集合的请求,但前端发起请求总是裸奔,应该放在云函数中请求;

小程序初始化

第一步是初始化小程序,初始化分为小程序和云函数2个步骤小程序初始化则是在app.js中

/miniprogram/app.js

初始化的时候若注释env默认使用第一个云开发环境

// app.js
App({
  onLaunch: function () {
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力');
    } else {
      wx.cloud.init({
        env: 'fengrui-1gevmgfza8786ec0',//若注释env默认使用第一个云开发环境
        traceUser: true,
      });
    }
    this.globalData = {};
  }
});

云函数初始化

我们得在cloudfunctions文件上右键建立一个云函数,我们取名为getVersions

新手:云函数发起请求集合实现数据分页

在此之前我们建立一个集合 名为:todool,随意添加一些数据

在getVersions目录下有一个index.js,初始化env会有一个默认值,改默认值选择第一个云开发环境,若我们所在的开发环境不是第一个手动写写id,随后我们写一个函数请求到集合的数据

// 云函数入口文件
const cloud = require('wx-server-sdk')
​
cloud.init({
    //env:cloud.DYNAMIC_CURRENT_ENV 默认值的时候使用第一个云开发环境
    env: 'fengrui-1gevmgfza8786ec0'
})
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
    console.log(event)
   return db.collection('todoos').get()
}

以上执行之后会获取集合中所有的数据,有200条就获取200条;因为我们得分页请求,添加limt和skip

// 云函数入口函数
exports.main = async (event, context) => {
    console.log(event)
    // limit 默认返回20条数据
    // skip 查询返回结果时从指定序列后的结果开始返回
   return db.collection('todoos').limit(20).skip(event.skip).get()
}

若你想每次一次获取数据都是默认获取20条则可以不写limit,而skip需要动态传入(skip可以理解为我们下一页的页数参数)

小程序前端

data中我们添加skip上拉的参数,fengruiData存放我们获取的数据;页面打开同时加载函数

data: {
    skip:0,
    fengruiData:[]
  },
​
   /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.getVersion();
  },

我们默认值limit是20,我们上啦加载之后skip的值应该从0变成20,请求数据从上次的末尾开始返回

/**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    this.data.skip = this.data.skip + 20
    this.getVersion();
  },

最后的执行函数

// 获取集合数据
  getVersion() {
    wx.cloud.callFunction({
      // 云函数名称
      name: 'getVersions',
      // 传给云函数的参数
      data: {
        skip:this.data.skip
      },
      success: res =>{
        let oldData = this.data.fengruiData;
        console.log(res,'res');
        this.setData({
          fengruiData:oldData.concat(res.result.data)
        })
      },
    })
  }

最后

云函数中发起请求不会在小程序端network中显示,相比直接在小程序端发起请求相对应安全些

官方文档

skiph说明

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/collection/Collection.skip.html

limit说明

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/collection/Collection.limit.html

初始化init说明

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/Cloud.init.html