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

相关推荐
汉得数字平台9 分钟前
【鲲苍提效】全面洞察用户体验,助力打造高性能前端应用
前端·前端监控
花海如潮淹15 分钟前
前端性能追踪工具:用户体验的毫秒战争
前端·笔记·ux
_丿丨丨_5 小时前
XSS(跨站脚本攻击)
前端·网络·xss
天天进步20155 小时前
前端安全指南:防御XSS与CSRF攻击
前端·安全·xss
拾光拾趣录8 小时前
括号生成算法
前端·算法
拾光拾趣录8 小时前
requestIdleCallback:让你的网页如丝般顺滑
前端·性能优化
前端 贾公子9 小时前
vue-cli 模式下安装 uni-ui
前端·javascript·windows
拾光拾趣录9 小时前
链表合并:双指针与递归
前端·javascript·算法
@大迁世界9 小时前
前端:优秀架构的坟墓
前端·架构
期待のcode9 小时前
图片上传实现
java·前端·javascript·数据库·servlet·交互