在小程序开发工具中,启动云开发默认模板,提供的云函数办法是一个请求对应一个云函数,比如说,我要获取用户登录数据,就添加一个login函数,然后前端就请求这个login获取,如果现在我要通过云函数删除我的使用用户,是不是就得重新再建一个函数如delete,然后这个delete就用于处理前端提交的用户删除任务,如果到时候任务多了,不就需要创建很多个云函数了吗?麻烦,所以我们想办法一个函数处理多个任务,这就需要使用云函数路由了。
最起先我的想法是用switch,在云函数中对请求参数加一个判断,然后再进行分别请求,例如:
代码语言:javascript复制exports.main = async (event, context) => {switch (event.action) {case 'getFunction1': {return getFunction1(event) } case 'getFunction2': { return getFunction2(event) } case 'getFunction3': { return getFunction3(event) } case 'getFunction4': { return getFunction4(event) } case 'getFunction5': { return getFunction5(event) }default: break }}
理论和实际操作证明,这种办法确实可行,但是写着写着,我感觉有点不是很丝滑,不是很流畅,没有写laravel路由配置的那么自然,所以就开始想想有没有其它办法,百度了一下,找到了一个好东西:tcb-router
Github地址:
https://github.com/TencentCloudBase/tcb-router
使用说明上面都有介绍,简单举一个目前小程序博客系统上面的例子:
代码语言:javascript复制// 云函数入口文件var cloud = require('wx-server-sdk');var TcbRouter = require('tcb-router');
cloud.init();const db = cloud.database();exports.main = (event, context) => { const app = new TcbRouter({ event });//登录验证openid app.router('login', async (ctx) => {const wxContext = cloud.getWXContext(); ctx.body={ openid: wxContext.OPENID } });//【后台】分类管理--删除 app.router('admin/kind/delete', async (ctx) => {try {return await db.collection('kind').doc(event.kind._id).remove() } catch (e) { console.error(e) } }); return app.serve();}
对应的前端代码:
代码语言:javascript复制const db = wx.cloud.database();//获取openidlogin(){ wx.cloud.callFunction({name: 'admin',data: {$url: "login", },complete: res => { console.log(res); } })},//删除分类del(e) {var that = this;var kind = e.currentTarget.dataset.kind; wx.cloud.callFunction({name: "admin",data: {$url: "admin/kind/delete",kind: kind, },complete: res => { that.getList(); } }) },
具体的参考云开发小程序的云函数逻辑
https://github.com/xuhuai66/wxapp-blo