【小程序云开发】云函数路由的高效配置

2019-07-14 13:33:58 浏览数 (1)

在小程序开发工具中,启动云开发默认模板,提供的云函数办法是一个请求对应一个云函数,比如说,我要获取用户登录数据,就添加一个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

0 人点赞