小程序云开发学习

最近在学习云开发,于是将之前的小程序(接口服务基于koa2)用云开发做了重构,学以致用哈哈。欢迎各位一起讨论,学习~

部分功能截图:

  

功能介绍

  • 发现:banner(热点) + 热门比赛
  • 联赛:联赛列表 + 联赛详细信息
  • 比赛:图文直播 + 比赛详细数据
  • 好看:比赛视频、视频集锦等
  • 其它...

技术点

  • 接口服务:云开发全家桶(云函数+存储+云数据库+定时触发器+事件触发器+云调用)
  • 小程序端:原生开发,半屏小程序接入实践

项目结构

项目整体结构分: cloudfunctions和miniprogram两大部分,其中cloudfunctions是各个云函数,提供功能接口,部分是云函数定时任务、事件触发器;miniprogram是小程序部分的代码。如下图:

第三方服务

  • 接口服务:steamwebpai
  • 小程序:bilibili小程序(半屏嵌入)

云函数- CRUD篇

在云函数中通过调用数据库的增删查改API来完成对数据的CRUD,如下是一个查询比赛预告的操作:

const cloud = require('wx-server-sdk');
cloud.init();

const db = cloud.database();
const collection = db.collection("match-schedule");
const _ = db.command;

exports.main = async (event) => {
    try {
        const {
            limit = 10,
            skip = 0,
            league_id
        } = event;
        const timestamp = Date.now() / 1000;
        const whereObj = league_id ? {
            league_id,
            scheduled_time: _.gt(timestamp)
        } : {
            scheduled_time: _.gt(timestamp)
        };
        const result = await collection.where(whereObj).orderBy('scheduled_time', 'asc').skip(skip).limit(limit).get();
        return {
            code: 0,
            data: {
                list: result.data
            }
        }
    } catch (err) {
        console.log('getMatchSchedule err...', err)
        return {
            code: -1,
            msg: err
        }
    }
}

定时触发器

如果云函数需要定时 / 定期执行,也就是定时触发,我们可以使用云函数定时触发器。通过这个,我们可以实现一些定时任务,以达到获取实时数据的目的。例如在这个小程序中实现的定时任务有:定时请求steam web api获取进行中的比赛数据,定时请求第三方api接口获取比赛预告数据等。

事件触发器

提供针对事件变化来自动触发云函数的能力。例如集合文档的变更,存储资源的变更等。通过事件触发器,可以更加灵活的进行业务逻辑的开发。如下的同步联赛数据触发器:当集合leauge的sync_status字段=1(更新操作)时,将自动执行云函数syncLeagueData。

云调用

云调用是云开发提供的基于云函数使用小程序开放接口的能力。在云函数中使用云调用调用服务端接口无需换取 access_token,只要是在从小程序端触发的云函数中发起的云调用都经过微信自动鉴权。如下是一个在云函数调用图片内容安全接口(鉴黄)的例子:

const cloud = require('wx-server-sdk');

exports.main = async (event, context) => {
    const { imageBuffer } = event.params;
    try {
        const res = await cloud.openapi.security.imgSecCheck({
            media: {
                contentType: 'image/png',
                value: imageBuffer
            }
        });
        return {
            code: 0,
            data: res
        }
    } catch (err) {
        return {
            code: -1,
            msg: err
        }
    };
}

附言

篇幅所限,有兴趣的小伙伴可以点击进入我的个人主页(然后扫个人案例中的小程序码),或微信搜索 MatchBox 小程序,欢迎体验,交流讨论、建议等。

posted @ 2022-10-27 09:43  wx_xfy6369  阅读(165)  评论(0编辑  收藏  举报