TcbRouter
源码作者:项目概览 - tcb-router - GitCode
作用
以类似于koa脚手架的方式解决微信云函数数量的限制问题
对于使用过koa框架的码农非常友好
基于 koa 风格的小程序·云开发云函数轻量级类路由库,主要用于优化服务端函数处理逻辑
准备
创建node.js云函数
在你创建的node.js云函数的目录名称右键单击,选择
在外部终端打开
- 我是这么创建的,运行中没有什么问题,如果有别的更好的方法,请忽略。在终端输入npm install --save tcb-router 然后回车
安装完成之后可能会有几条提示,不用在意,实在不行就按提示执行命令。
安装完成之后只要能看见创建的云函数文件夹下面多一些文件,看到tcb-router:1.1.2就是安装成功了
使用
// 引入
const TcbRouter = require('tcb-router');
// 实例
const app = new TcbRouter({event});
// 使用
app.use({async (ctx,next) => {}})
众多使用方法请参照源码文档
下面以一个登录的案例演示TcbRouter的用法
云函数端
目录结构
入口文件:tcb_user>index.js
添加入口文件方便管理
csharp
// cloudfunctions>tcb_user>index.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const login = require('./login/index');
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
const type = event.type
switch (type) {
case 'login':
return await login.main(event,context);
default:
break;
}
}
登录文件:tcb_user>login>index.js
csharp
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const TcbRouter = require('tcb-router');
const db = cloud.database();
// const _ = db.command;
exports.main = async (event,context) => {
const wxContext = cloud.getWXContext();// 获取小程序用户信息
let {
APPID,
OPENID
} = wxContext;
const app = new TcbRouter({event});// 创建实例
app.router('login',async (ctx,next) => {
try {
let {userInfo} = event;//event是前端传过来的data数据,通过getUserInfo或者getUserProfile都能传
let user = db.collection('users');//连接数据库
let {total} = await user.where({OPENID:OPENID}).count();//查询用户是否存在
console.log(total);
if(total){
// 存在则更新
await user.where({OPENID:OPENID}).update({data:userInfo})
let {data} = await user.where({OPENID:OPENID}).get()
console.log('用户信息:',data);
// 将查询结果返回
return ctx.body = {
code:0,
msg:'查询成功',
userInfo:data[0]
}
}else{
// 不存在则注册
await user.add({
data:{
nickName:userInfo.nickName,
gender:userInfo.gender,
avatarUrl:userInfo.avatarUrl,
OPENID:OPENID
}
})
// 这里我又查了一次,方便新用户直接登录 - 当查询结果不存在时直接注册并登录
let {userData} = await user.where({OPENID:OPENID}).get()
return ctx.body = {
code:0,
msg:'添加成功',
userInfo:userData[0]
}
}
// 执行下一个中间件 - 虽然我没写下一个中间件吧
await next();
} catch (error) {
return ctx.body
}
})
//这个是必须的
return app.serve();
}
小程序端
js
javascript
login(){
wx.getUserProfile({
desc: '用户完善用户信息',
success:(res)=> {
this.setData({cloudID:res.cloudID})
wx.cloud.callFunction({
name:'tcb_user',
data:{ // 将参数传到云函数
type:'login',
$url:'login',
userInfo:res.userInfo,
},
success:(res)=> {
console.log('登录请求成功',res);
}
})
},
fail:(err) => {
console.log('登录请求失败',err);
}
})
wx.cloud.callFunction({
name:'tcb_user',
data:{
type:'login'
},
success(res){
console.log('请求成功',res);
},
error(err){
console.log('请求失败',err);
}
})
},
wxml
bash
<button type="primary" bind:tap="login">tcbRouter</button>
结果展示
不要忘了开通云函数,并且创建一个users的数据库,要不然连接不到数据库