小程序云开发实战分享-MatchBox(Dota2云玩家赛事盒子)

208 阅读4分钟

gh_355c92b1b7ca_344.jpg

Dota2云玩家赛事盒子 — Dota2比赛图文直播,比赛预告,比赛记录,TI.10年,Dota2视频集锦专题等,更多功能可扫描上方小程序码体验查看。欢迎大家扫码体验、交流学习~

为什么选用小程序云开发

微信云开发是微信团队联合腾讯云推出的专业的小程序开发服务,具有如下优势:

  • 无需搭建服务器,快速构建小程序、公众号
  • 免登录、免鉴权调用微信开放服务
  • 统一开发多端应用
  • 按量计费,成本更低

之前的接口服务(基于koa2)是部署到阿里云服务器,需要安装、配置很多东西,如数据库Mysql、Redis、Docker、域名、端口等,这些对前端开发来说,可能需要花费一定的时间去学习新知识。除此之外,还需要懂一定的服务运维知识。当时虽然接口服务部署上去了,但由于对服务运维这些了解不深,所以当接口服务出了问题时,还是不知道从何入手解决。后来偶然了解到小程序的云开发,可以不需要搭建服务器,于是便对此用云开发进行升级改造。主要的技术点包括云函数、存储、云数据库、云调用、事件触发器、云函数定时器等。

下面先简单讲解几个基础概念,详细文档:小程序云开发文档-传送门

云函数

云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。所以,用云函数可以不需要搭建服务器,也不需要去申请域名、配置端口等。一键上传部署后,在小程序端直接使用API调用即可。整一套下来,对开发来说,节省了很多工作量。

存储

云开发提供了一块存储空间,提供了上传文件到云端、带权限管理的云端下载能力,开发者可以在小程序端和云函数端通过 API 使用云存储功能。云存储可以简单理解为静态资源服务器,用来储存图片,视频等文件资源。

云数据库

云开发提供了一个 JSON 数据库,一条记录就是一个JSON对象,类似MongoDB。其中的集合、记录、字段分别对应关系型数据库的表、行、列。通过云开发提供的云数据库的操作API,就可以开始愉快的CRUD啦!

项目结构

image.png

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

云函数- 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。 image.png

云调用

云调用是云开发提供的基于云函数使用小程序开放接口的能力。在云函数中使用云调用调用服务端接口无需换取 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
        }
    };
}

结语

篇幅所限,此篇只是抛砖引玉,后续会新开篇幅细讲。感谢各位的阅读,嘿嘿~