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

相关推荐
Smile_Gently2 小时前
前端:最简单封装nmp插件(组件)过程。
前端·javascript·vue.js·elementui·vue
luckycoke8 小时前
小程序立体轮播
前端·css·小程序
一 乐8 小时前
高校体育场管理系统系统|体育场管理系统小程序设计与实现(源码+数据库+文档)
前端·javascript·数据库·spring boot·高校体育馆系统
懒羊羊我小弟8 小时前
常用Webpack Loader汇总介绍
前端·webpack·node.js
祈澈菇凉9 小时前
ES6模块的异步加载是如何实现的?
前端·javascript·es6
我爱学习_zwj9 小时前
4.从零开始学会Vue--{{组件通信}}
前端·javascript·vue.js·笔记·前端框架
顾比魁9 小时前
XSS盲打:当攻击者“盲狙”管理员
前端·网络安全·xss
黑客老李9 小时前
新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)
java·运维·服务器·前端·xss
晚风予星9 小时前
简记|LogicFlow自定义BPMN元素节点
前端
Json____10 小时前
使用html css js 开发一个 教育机构前端静态网站模板
前端·css·html·js·前端学习·企业站·教育机构网站