• 回答 (7)
  • 关注 (3)
  • 查看 (2889)

目前,微信小程序越来越流行,而且功能越来越强大,在性能方面也越做越好。因为能够原生调用小程序提供的组件和 API ,小程序的开发快捷,使用方便,越来越多的产品会落地到微信小程序上。但传统的微信小程序开发,和普通的H5页面开发或者原生APP开发相比,只是改变了前端部分的开发方式,还是离不开厚重的后台开发。 现在的小程序,在后台服务方面,正在往 serverless 趋势方向发力。小程序提供了云厂商的无服务器函数 SCF,使得小程序无需搭建一个后台服务即可运行。如何结合腾讯云开发微信小程序?

萌萌哒小昕玥萌萌哒小昕玥提问于
幽幽77IT从业者回答于

腾讯云 Tencent Cloud Base 团队开发了 tcb-router,云函数路由管理库方便大家使用。

架构一:一个云函数处理一个任务

这种架构下,其实不需要用到 tcb-router,像普通那样写好云函数,然后在小程序端调用就可以了。

  • 云函数// 函数 router exports.main = (event, context) => { return { code: 0, message: 'success' }; };
  • 小程序端wx.cloud.callFunction({ name: 'router', data: { name: 'tcb', company: 'Tencent' } }).then((res) => { console.log(res); }).catch((e) => { console.log(e); });

架构二: 按请求给云函数归类

此类架构就是将相似的请求归类到同一个云函数处理,比如可以分为用户管理、支付等等的云函数。

  • 云函数// 函数 user const TcbRouter = require('tcb-router'); exports.main = async (event, context) => { const app = new TcbRouter({ event }); app.router('register', async (ctx, next) => { await next(); }, async (ctx, next) => { await next(); }, async (ctx) => { ctx.body = { code: 0, message: 'register success' } }); app.router('login', async (ctx, next) => { await next(); }, async (ctx, next) => { await next(); }, async (ctx) => { ctx.body = { code: 0, message: 'login success' } }); return app.serve(); }; // 函数 pay const TcbRouter = require('tcb-router'); exports.main = async (event, context) => { const app = new TcbRouter({ event }); app.router('makeOrder', async (ctx, next) => { await next(); }, async (ctx, next) => { await next(); }, async (ctx) => { ctx.body = { code: 0, message: 'make order success' } }); app.router('pay', async (ctx, next) => { await next(); }, async (ctx, next) => { await next(); }, async (ctx) => { ctx.body = { code: 0, message: 'pay success' } }); return app.serve(); };
  • 小程序端// 注册用户 wx.cloud.callFunction({ name: 'user', data: { $url: 'register', name: 'tcb', password: '09876' } }).then((res) => { console.log(res); }).catch((e) => { console.log(e); }); // 下单商品 wx.cloud.callFunction({ name: 'pay', data: { $url: 'makeOrder', id: 'xxxx', amount: '3' } }).then((res) => { console.log(res); }).catch((e) => { console.log(e); });

架构三: 由一个云函数处理所有服务

  • 云函数// 函数 router const TcbRouter = require('tcb-router'); exports.main = async (event, context) => { const app = new TcbRouter({ event }); app.router('user/register', async (ctx, next) => { await next(); }, async (ctx, next) => { await next(); }, async (ctx) => { ctx.body = { code: 0, message: 'register success' } }); app.router('user/login', async (ctx, next) => { await next(); }, async (ctx, next) => { await next(); }, async (ctx) => { ctx.body = { code: 0, message: 'login success' } }); app.router('pay/makeOrder', async (ctx, next) => { await next(); }, async (ctx, next) => { await next(); }, async (ctx) => { ctx.body = { code: 0, message: 'make order success' } }); app.router('pay/pay', async (ctx, next) => { await next(); }, async (ctx, next) => { await next(); }, async (ctx) => { ctx.body = { code: 0, message: 'pay success' } }); return app.serve(); };
  • 小程序端// 注册用户 wx.cloud.callFunction({ name: 'router', data: { $url: 'user/register', name: 'tcb', password: '09876' } }).then((res) => { console.log(res); }).catch((e) => { console.log(e); }); // 下单商品 wx.cloud.callFunction({ name: 'router', data: { $url: 'pay/makeOrder', id: 'xxxx', amount: '3' } }).then((res) => { console.log(res); }).catch((e) => { console.log(e); });

回答过的其他问题

本地硬盘如何升级云硬盘?

幽幽77IT从业者
可以另外挂载一个云硬盘的 将以在北京地域下创建一块空的弹性云盘 cbs-test(有关什么是弹性云盘可以参考 云硬盘的分类,有关如何创建包含数据的云硬盘请参考快照创建云硬盘)、连接到云服务器实例、创建文件系统并向其中写入一个名为 qcloud.txt 的文件为例,帮助用户了解如...... 展开详请

2G行将退网,共享单车何去何从?

幽幽77IT从业者
共享单车为了铺开市场,很多都是采用“车海战术”,即用大量廉价车占领城市的每个角落。所以他的生产成本会被压到极其低。 车子扔出去了,就压根没想着拿回来。 目前主要用的MTK2503方案(2G),带GPS(或北斗)和多频GSM的一块开发板零售价还不到30块。大概就长下面这样。厂商批量...... 展开详请

已申请了孵化计划是否支持申请放飞计划?

幽幽77IT从业者

这个活动好像是只能选择一个来做申请呢

自然场景文字识别技术及在地图中的应用

幽幽77IT从业者
自然场景文字识别的背景复杂,照片拍摄时的抖动,以及低分辨率、强光、阴影、噪声、艺术字、排列方式、模糊和遮挡等情况都给自然场景文字识别带来了很大的挑战。早先的传统文字识别方法基本都采用基于模板匹配的方式,此类技术针对自然场景下的文字识别几乎不起作用。目前自然场景文字识别中主流的实时...... 展开详请

cos-nodejs-sdk-v5 找不到getObjectUrl接口的说明?

什麼是消息推送 ?

幽幽77IT从业者

扫码关注云+社区

领取腾讯云代金券