小程序云函数获取用户昵称_小程序云开发云函数进阶
“
云函数(官方文档说明)
云函数即在云端(服务器端)运行的函数。在物理设计上,一个云函数可由多个文件组成,占用一定量的 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 install4. 接下来就是实现功能,我这里有举例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), 测试结果如下图:
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 我目前只能在每个云函数下创建一个这样保证返回的结构是一致的。官方也没找到其他的办法只需要创建一次的
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
