摘要:此時(shí),就需要通過(guò)云函數(shù)更新數(shù)據(jù)庫(kù),新建云函數(shù)編輯更新數(shù)據(jù)根據(jù)更新已打開人數(shù)使用云函數(shù)更新某數(shù)據(jù)的打開人數(shù)數(shù)據(jù)庫(kù)模糊查詢小程序云開發(fā)可以使用正則表達(dá)式進(jìn)行模糊查詢。
1. 小程序功能
古詩(shī)詞大全
成語(yǔ)大全
成語(yǔ)接龍
詩(shī)詞飛花令
詩(shī)詞分享、收藏
詩(shī)詞接龍
唐詩(shī)宋詞起名字
百家姓
猜謎語(yǔ)
2. 小程序地址https://github.com/caochangkui/miniprogram-project
3. 小程序預(yù)覽: 5. 項(xiàng)目結(jié)構(gòu). ├── README.md ├── project.config.json // 項(xiàng)目配置文件 ├── cloudfunctions | 云環(huán)境 // 存放云函數(shù)的目錄 │ ├── login // 用戶登錄云函數(shù) │ │ ├── index.js │ │ └── package.json │ └── collection_get // 數(shù)據(jù)庫(kù)查詢?cè)坪瘮?shù) │ │ ├── index.js │ │ └── package.json │ └── collection_update // 數(shù)據(jù)庫(kù)更新云函數(shù) │ ├── index.js │ └── package.json └── miniprogram ?? ├── images // 存放小程序圖片 ?? ├── lib // 配置文件 ?? ├── pages // 小程序各種頁(yè)面 ?? | ├── index // 首頁(yè) ?? | └── menu // 分類頁(yè) ?? | └── user // 用戶中心 ?? | └── search // 搜索頁(yè) ?? | └── list // 列表頁(yè) 搜索結(jié)果頁(yè) ?? | └── detail // 詳情頁(yè) ?? | └── collection // 收藏頁(yè) ?? | └── find // 發(fā)現(xiàn)頁(yè) ?? | └── idiom-jielong // 成語(yǔ)接龍頁(yè) ?? | └── poet // 作者頁(yè) ?? | └── baijiaxing // 百家姓 ?? | └── xiehouyu // 歇后語(yǔ) ?? | └── poet // 作者頁(yè) ?? | └── suggest // 建議反饋 ?? | └── ... // 其他 ?? ├── style // 樣式文件目錄 ├── app.js // 小程序入口文件 ├── app.json // 全局配置 └── app.wxss // 全局樣式6. 封裝云函數(shù)操作數(shù)據(jù)庫(kù)
本項(xiàng)目是使用的小程序云開發(fā)。云開發(fā)提供了一個(gè) JSON 數(shù)據(jù)庫(kù),用戶可以直接在云端進(jìn)行數(shù)據(jù)庫(kù)增刪改查,但是,小程序?qū)τ脩舨僮鲾?shù)據(jù)的權(quán)限進(jìn)行了一定的限制(例如數(shù)據(jù)update、一次性get記錄的條數(shù)限制等),所以,這里主要采用云函數(shù)來(lái)操作數(shù)據(jù)庫(kù)。
查詢數(shù)據(jù)、分頁(yè)查詢函數(shù)根目錄上右鍵,在右鍵菜單中,選擇創(chuàng)建一個(gè)新的 Node.js 云函數(shù),我們將該云函數(shù)命名為 collection_get。
編輯 index.js:
// 云函數(shù)入口文件 const cloud = require("wx-server-sdk") cloud.init() const db = cloud.database() exports.main = async (event, context) => { /** * page: 第幾頁(yè) * num: 每頁(yè)幾條數(shù)據(jù) * condition: 查詢條件,例如 { name: "李白" } */ const {database, page, num, condition} = event console.log(event) try { return await db.collection(database) .where(condition) .skip(num * (page - 1)) .limit(num) .get() } catch (err) { console.log(err) } }使用 collection_get 云函數(shù)
例如,按照查詢條件{tags: "唐詩(shī)三百首"}查詢?cè)娫~列表,每頁(yè)num = 10條數(shù)據(jù):
let {list, page, num} = this.data let that = this this.setData({ loading: true }) wx.cloud.callFunction({ name: "collection_get", data: { database: "gushici", page, num, condition: { tags: "唐詩(shī)三百首" } }, }).then(res => { if(!res.result.data.length) { // 沒(méi)搜索到 that.setData({ loading: false, isOver: true }) } else { let res_data = res.result.data list.push(...res_data) that.setData({ list, page: page + 1, // 頁(yè)面加1 loading: false }) } }) .catch(console.error) }更新數(shù)據(jù)
注意,當(dāng)我們向數(shù)據(jù)庫(kù)中添加記錄時(shí),系統(tǒng)會(huì)自動(dòng)幫我們?yōu)槊織l記錄添加上用戶的 openid 字段,但如果,數(shù)據(jù)表是自己用 json/csv 文件導(dǎo)入的,就不存在 openid 字段,此時(shí),當(dāng)更新這個(gè)數(shù)據(jù)表時(shí),系統(tǒng)會(huì)認(rèn)為你不是創(chuàng)建者,所以也就無(wú)法更新。
此時(shí),就需要通過(guò)云函數(shù)更新數(shù)據(jù)庫(kù),新建云函數(shù) collection_update, 編輯 index.js:
// 更新數(shù)據(jù) - 根據(jù) _id 更新已打開人數(shù) const cloud = require("wx-server-sdk") cloud.init() const db = cloud.database() const _ = db.command exports.main = async (event, context) => { const { id } = event console.log(event) try { return await db.collection("gushici").doc(id) .update({ data: { opened: _.inc(1) }, }) } catch (e) { console.error(e) } }使用 collection_update 云函數(shù)
更新某_id數(shù)據(jù)的打開人數(shù):
let _id = e.currentTarget.dataset.id wx.cloud.callFunction({ name: "collection_update", data: { id: _id }, }).then(res => { console.log(res.data) }) .catch(console.error)7. 數(shù)據(jù)庫(kù)模糊查詢
小程序云開發(fā)可以使用正則表達(dá)式進(jìn)行模糊查詢。例如, 根據(jù)用戶輸入關(guān)鍵詞,查詢標(biāo)題中存在改關(guān)鍵詞的古詩(shī)詞。
let database = "gushici" let condition = { name: { $regex:".*"+ inputValue, $options: "i" } } let { list, page, num } = this.data let that = this this.setData({ loading: true }) // 模糊查詢 wx.cloud.callFunction({ name: "collection_get", data: { database, page, num, condition }, }).then(res => { if (!res.result.data.length) { // 沒(méi)搜索到 that.setData({ loading: false, isOver: true }) } else { let res_data = res.result.data list.push(...res_data) that.setData({ list, loading: false }) } }) .catch(console.error)8. 使用 async/await 處理異步
參考文章:微信小程序中使用Async/await方法處理異步請(qǐng)求
9. 分享或轉(zhuǎn)發(fā)功能小程序中頁(yè)面觸發(fā)轉(zhuǎn)發(fā)的方式有兩種:
1.在小程序的右上角選擇轉(zhuǎn)發(fā),需要定義函數(shù) Page.onShareAppMessage,如果當(dāng)前頁(yè)面沒(méi)有定義此事件,則點(diǎn)擊后無(wú)效果。
2.通過(guò)給 button 組件設(shè)置屬性 open-type="share",可以在用戶點(diǎn)擊按鈕后觸發(fā) Page.onShareAppMessage 事件,如果當(dāng)前頁(yè)面沒(méi)有定義此事件,則點(diǎn)擊后無(wú)效果。
用戶還可以在 Page.onShareAppMessage 事件中自定義轉(zhuǎn)發(fā)后顯示的標(biāo)題、圖片、路徑:
onShareAppMessage(res) { let id = wx.getStorageSync("shareId") if (res.from === "button") { // 來(lái)自頁(yè)面內(nèi)轉(zhuǎn)發(fā)按鈕 console.log(res.target) } return { title: `跟我一起挑戰(zhàn)最長(zhǎng)的成語(yǔ)接龍吧!`, path: `pages/find/find`, imageUrl: "/images/img.jpg", } },注意:轉(zhuǎn)發(fā)成功/失敗的 callback 已經(jīng)被官方廢棄,所以理論上小程序是無(wú)法得知用戶是否將頁(yè)面分享成功的 10. 用戶授權(quán)
詳情請(qǐng)參考文章:微信小程序之授權(quán)
11. 需要注意的幾個(gè)坑 查詢不到數(shù)據(jù)數(shù)據(jù)表中明明有數(shù)據(jù),但是 collection.get 到的卻為空。解決:可以在云開發(fā)控制臺(tái)中打開數(shù)據(jù)庫(kù)權(quán)限設(shè)置,設(shè)置權(quán)限。
更新數(shù)據(jù)失敗collection.update 函數(shù)調(diào)用成功單返回的卻是0行記錄被更新,因?yàn)樾〕绦蚨瞬辉试S更新沒(méi)有 openid 字段的數(shù)據(jù)。解決:可以通過(guò)云函數(shù)更新數(shù)據(jù)庫(kù)。
background 圖片 url 不能為本地圖片解決:1:將圖片上傳到服務(wù)器,填寫服務(wù)器上的圖片路徑地址。2:將圖片轉(zhuǎn)為 base64 編碼。
往云數(shù)據(jù)庫(kù)中批量導(dǎo)入 json 數(shù)據(jù)失敗原因:請(qǐng)看文檔:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/import.html
解決:去掉json數(shù)據(jù) {}之間的逗號(hào), 如果最外層為 [],也必須去掉, 最終形如:
{ "index": "作者_(dá)1", "type": "作者", "poet": "李白", "abstract": "李白(701年-762年),字太白,號(hào)青蓮居士,唐朝浪漫主義詩(shī)人,被后人譽(yù)為“詩(shī)仙”..." } { "index": "作者_(dá)2", "type": "作者", "poet": "白居易", "abstract": "白居易(772年-846年),字樂(lè)天,號(hào)香山居士..." }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100874.html
摘要:為了方便廣大的開發(fā)者,特此統(tǒng)計(jì)了網(wǎng)上諸多的免費(fèi),為您收集免費(fèi)的接口服務(wù),做一個(gè)的搬運(yùn)工,以后會(huì)每月定時(shí)更新新的接口。將長(zhǎng)段中文切詞分開。 為了方便廣大的開發(fā)者,特此統(tǒng)計(jì)了網(wǎng)上諸多的免費(fèi)API,為您收集免費(fèi)的接口服務(wù),做一個(gè)api的搬運(yùn)工,以后會(huì)每月定時(shí)更新新的接口。有些接口來(lái)自第三方,在第三方注冊(cè)就可以成為他們的會(huì)員,免費(fèi)使用他們的部分接口。 百度AccessToken:針對(duì)HTTP ...
摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒(méi)想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...
摘要:在現(xiàn)如今的游戲市場(chǎng)寒冬中,擁有微信龐大的用戶量以及更好兼容性的小程序游戲,優(yōu)勢(shì)就顯得格外明顯。掃描二維碼即可報(bào)名您在現(xiàn)場(chǎng)將有這些體驗(yàn)來(lái)自騰訊云云開發(fā)團(tuán)隊(duì)與微信團(tuán)隊(duì)聯(lián)合打造干貨分享,內(nèi)容包括微信小游戲首發(fā)經(jīng)驗(yàn)分享。 有人說(shuō)微信小程序游戲的百花齊放 活像十幾年前的4399小游戲稱霸互聯(lián)網(wǎng)的景象 歪,斗地主嗎,三缺二, 不用下app,小程序就能玩,我保證不搶地主讓你搶! ...... ‘...
本文收集學(xué)習(xí)過(guò)程中使用到的資源。 持續(xù)更新中…… 項(xiàng)目地址 https://github.com/abc-club/f... 目錄 vue react react-native Weex typescript Taro nodejs 常用庫(kù) css js es6 移動(dòng)端 微信公眾號(hào) 小程序 webpack GraphQL 性能與監(jiān)控 高質(zhì)文章 趨勢(shì) 動(dòng)效 數(shù)據(jù)結(jié)構(gòu)與算法 js core 代碼規(guī)范...
摘要:云開發(fā),開箱即用項(xiàng)目介紹一個(gè)基于微信的接龍小程序,開箱即用。修改項(xiàng)目名稱及配置在下載代碼后,開發(fā)者優(yōu)先修改小程序的配置信息。開發(fā)者可以通過(guò)小程序開發(fā)工具云開發(fā)功能進(jìn)行創(chuàng)建。 云開發(fā),開箱即用 項(xiàng)目介紹 一個(gè)基于微信的接龍小程序,開箱即用。 功能說(shuō)明 發(fā)起接龍 - 簡(jiǎn)單易用,分類活動(dòng)及拼團(tuán)兩種類型,可設(shè)置報(bào)名上限 接龍報(bào)名 - 報(bào)名參加活動(dòng),拼團(tuán)類活動(dòng)能夠自動(dòng)計(jì)算金額 報(bào)名確認(rèn) - 活...
閱讀 3166·2021-09-28 09:36
閱讀 3699·2021-09-08 09:45
閱讀 1819·2021-09-01 10:43
閱讀 3492·2019-08-30 12:44
閱讀 3360·2019-08-29 17:25
閱讀 1382·2019-08-29 11:03
閱讀 2002·2019-08-26 13:36
閱讀 704·2019-08-23 18:24