小程序云函数获取用户昵称_小程序云开发云函数进阶
“
云函數(官方文檔說明)
云函數即在云端(服務器端)運行的函數。在物理設計上,一個云函數可由多個文件組成,占用一定量的 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 我目前只能在每個云函數下創建一個這樣保證返回的結構是一致的。官方也沒找到其他的辦法只需要創建一次的
總結
以上是生活随笔為你收集整理的小程序云函数获取用户昵称_小程序云开发云函数进阶的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql illegal mix of
- 下一篇: python3--htmltestrun