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

相关推荐
熊的猫31 分钟前
JS 中的类型 & 类型判断 & 类型转换
前端·javascript·vue.js·chrome·react.js·前端框架·node.js
瑶琴AI前端1 小时前
uniapp组件实现省市区三级联动选择
java·前端·uni-app
会发光的猪。1 小时前
如何在vscode中安装git详细新手教程
前端·ide·git·vscode
我要洋人死2 小时前
导航栏及下拉菜单的实现
前端·css·css3
科技探秘人2 小时前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
科技探秘人2 小时前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome
JerryXZR2 小时前
前端开发中ES6的技术细节二
前端·javascript·es6
七星静香3 小时前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
q2498596933 小时前
前端预览word、excel、ppt
前端·word·excel
小华同学ai3 小时前
wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器
前端·钉钉·飞书