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

相关推荐
崔庆才丨静觅6 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60616 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了6 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅7 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅7 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅7 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment7 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅8 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊8 小时前
jwt介绍
前端
爱敲代码的小鱼8 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax