小程序云函数获取用户昵称_小程序云开发云函数进阶

云函数(官方文档说明)

云函数即在云端(服务器端)运行的函数。在物理设计上,一个云函数可由多个文件组成,占用一定量的 CPU 内存等计算资源;各云函数完全独立;可分别部署在不同的地区。开发者无需购买、搭建服务器,只需编写函数代码并部署到云端即可在小程序端调用,同时云函数之间也可互相调用。

一个云函数的写法与一个在本地定义的 JavaScript 方法无异,代码运行在云端 Node.js 中。当云函数被小程序端调用时,定义的代码会被放在 Node.js 运行环境中执行。我们可以如在 Node.js 环境中使用 JavaScript 一样在云函数中进行网络请求等操作,而且我们还可以通过云函数后端 SDK 搭配使用多种服务,比如使用云函数 SDK 中提供的数据库和存储 API 进行数据库和存储的操作,这部分可参考数据库和存储后端 API 文档。

云开发的云函数的独特优势在于与微信登录鉴权的无缝整合。当小程序端调用云函数时,云函数的传入参数中会被注入小程序端用户的 openid,开发者无需校验 openid 的正确性因为微信已经完成了这部分鉴权,开发者可以直接使用该 openid。

本文不从官方文档基础进行介绍,而是直接讲解从实际使用过程开发方式基于文档的开发

01

一个函数只能干一件事吗?

    官方的文档说明每次加一个函数就需要创建一个云函数,一开始我也是这么干,不过后面发现这样没办法做到业务内聚;不管是个人项目还是企业项目,在面对这种情况下,都会考虑高内聚低耦合的方式。

    那有没有什么方式能解决这个问题呢?

    经过网络搜索找到了,也就是 tcb-router ,使用该依赖即可实现一个函数干多件事,具体实现如下:

1. 首先创建一个云函数,命名为 schedule(对应个人小程序的日程功能)

schedule

    index.js

    config.json

   package.json

2. 在index.js中添加依赖

// 云函数入口文件const cloud = require('wx-server-sdk')const TcbRouter = require('tcb-router')

3. 进入到shedule目录下,依次执行

cnpm install tcb-routercnpm install

4. 接下来就是实现功能,我这里有举例3个对数据库的操作(列表查询,增加,分组查询)

    在目录下创建对应操作文件 create.js、pageList.js、monthGroup.js, 以及需要的公共部分common.js

5. 在index.js中实现实际的路由调用,完整代码

// 云函数入口文件const cloud = require('wx-server-sdk')const TcbRouter = require('tcb-router')cloud.init({  env: cloud.DYNAMIC_CURRENT_ENV,  traceUser: true,})// 云函数入口函数exports.main = async (event, context) => {  const app = new TcbRouter({    event  })  // 每天分页列表  app.router('pageList', async (ctx, next) => {    const pageList = require('./pageList.js')    ctx.body = pageList.main(event, context)  })  // 查询每月的每一天存在的数量  app.router('monthGroup', async (ctx, next) => {    const monthGroup = require('./monthGroup.js')    ctx.body = monthGroup.main(event, context)  })  // 创建  app.router('create', async (ctx, next) => {    const create = require('./create.js')    ctx.body = create.main(event, context)  })  return app.serve()}

6. 分别实现具体的逻辑,这里只举例create.js的实现和common.js

// 云函数入口文件const cloud = require('wx-server-sdk')const db = cloud.database()const common = require('./common.js')const _ = db.commandconst $ = db.command.aggregateexports.main = async (event, context) => {  const wxContext = cloud.getWXContext()  const content = event.content  const time = event.time  const date = event.date  let result = await db.collection('schedule').add({    data: {      content,      time,      date,      status: 1,      _openid: wxContext.OPENID,      createTime: new Date(),      updateTime: new Date()    }  })  console.log(result)  if (result && result._id) {    return common.success(result._id)  } else {    return common.error(101001, "保存失败")  }}
exports.success = (data) => {  return {    data: data,    success: true,    code: 0,    msg: "",  }}exports.error = (code, msg) => {  return {    data: null,    success: false,    code: code,    msg: msg,  }}exports.zero = (num) => {  if (num < 10) {    return '0' + num  }  return num}
最后通过云函数本地调试即可测试结果了(首先要记得创建好数据库schedule), 测试结果如下图:

33de28e877af72c14104bfb49090a816.png

实际小程序中调用代码如下:
 const result = await wx.cloud.callFunction({      name: 'schedule',      data: {        $url: "create",        date: this.data.year + '-' + zero(this.data.month) +               '-' + zero(this.data.date),        time: formatTime(this.data.hour, this.data.minute),        content: this.data.content,      }    })    console.log(result)

02

没有解决的问题

到这里其实又想到有个问题没解决,比如我的common.js 我目前只能在每个云函数下创建一个这样保证返回的结构是一致的。官方也没找到其他的办法只需要创建一次的


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部