使用tcb-router管理云函数,完成云函数的登陆注册功能

TcbRouter

源码作者:项目概览 - tcb-router - GitCode

作用

以类似于koa脚手架的方式解决微信云函数数量的限制问题

对于使用过koa框架的码农非常友好

基于 koa 风格的小程序·云开发云函数轻量级类路由库,主要用于优化服务端函数处理逻辑

准备

  1. 创建node.js云函数

  2. 在你创建的node.js云函数的目录名称右键单击,选择在外部终端打开 - 我是这么创建的,运行中没有什么问题,如果有别的更好的方法,请忽略。

  3. 在终端输入npm install --save tcb-router 然后回车

  4. 安装完成之后可能会有几条提示,不用在意,实在不行就按提示执行命令。

  5. 安装完成之后只要能看见创建的云函数文件夹下面多一些文件,看到tcb-router:1.1.2就是安装成功了

  6. 使用

    // 引入

    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的数据库,要不然连接不到数据库

相关推荐
Hello-Mr.Wang2 分钟前
vue3中开发引导页的方法
开发语言·前端·javascript
程序员凡尘29 分钟前
完美解决 Array 方法 (map/filter/reduce) 不按预期工作 的正确解决方法,亲测有效!!!
前端·javascript·vue.js
编程零零七4 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
(⊙o⊙)~哦6 小时前
JavaScript substring() 方法
前端
无心使然云中漫步6 小时前
GIS OGC之WMTS地图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
前端·javascript
Bug缔造者6 小时前
Element-ui el-table 全局表格排序
前端·javascript·vue.js
xnian_7 小时前
解决ruoyi-vue-pro-master框架引入报错,启动报错问题
前端·javascript·vue.js
麒麟而非淇淋8 小时前
AJAX 入门 day1
前端·javascript·ajax
2401_858120538 小时前
深入理解MATLAB中的事件处理机制
前端·javascript·matlab
阿树梢8 小时前
【Vue】VueRouter路由
前端·javascript·vue.js