https://www.cnblogs.com/cckui/p/10228795.html
.
├── README.md
├── project.config.json // 项目配置文件
├── cloudfunctions | 云环境 // 存放云函数的目录
│ ├── login // 用户登录云函数
│ │ ├── index.js
│ │ └── package.json
│ └── collection_get // 数据库查询云函数
│ │ ├── index.js
│ │ └── package.json
│ └── collection_update // 数据库更新云函数
│ ├── index.js
│ └── package.json
└── miniprogram
├── images // 存放小程序图片
├── lib // 配置文件
├── pages // 小程序各种页面
| ├── index // 首页
| └── menu // 分类页
| └── user // 用户中心
| └── search // 搜索页
| └── list // 列表页 搜索结果页
| └── detail // 详情页
| └── collection // 收藏页
| └── find // 发现页
| └── idiom-jielong // 成语接龙页
| └── poet // 作者页
| └── baijiaxing // 百家姓
| └── xiehouyu // 歇后语
| └── poet // 作者页
| └── suggest // 建议反馈
| └── ... // 其他
├── style // 样式文件目录
├── app.js // 小程序入口文件
├── app.json // 全局配置
└── app.wxss // 全局样式
本專案是使用的小程式雲端開發。雲端開發提供了一個JSON 資料庫,使用者可以直接在雲端進行資料庫增刪改查,但是,小程式對使用者操作資料的權限進行了一定的限制(例如資料update、一次性get記錄的條數限制等),所以,這裡主要採用雲端函數來操作資料庫。
函數根目錄上右鍵,在右鍵選單中,選擇建立一個新的Node.js 雲函數,我們將該雲函數命名為collection_get。
編輯index.js:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
exports.main = async (event, context) => {
/**
* page: 第几页
* num: 每页几条数据
* 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)
}
}
例如,依照查詢條件{tags: '唐诗三百首'}
查詢詩詞列表,每頁num = 10
條數據:
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: '唐诗三百首'
}
},
}).then(res => {
if(!res.result.data.length) {
that.setData({
loading: false,
isOver: true
})
} else {
let res_data = res.result.data
list.push(...res_data)
that.setData({
list,
page: page + 1, // 页面加1
loading: false
})
}
})
.catch(console.error)
}
請注意,當我們向資料庫中新增記錄時,系統會自動幫我們為每筆記錄新增上使用者的openid
字段,但如果,資料表是自己用json/csv 檔案匯入的,就不存在openid
字段,此時,當更新這個資料表時,系統會認為你不是創建者,所以也無法更新。
此時,就需要透過雲端函數更新資料庫,新雲端函數collection_update, 編輯index.js:
// 更新数据 - 根据 _id 更新已打开人数
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)
}
}
更新某_id資料的開啟人數:
let _id = e.currentTarget.dataset.id
wx.cloud.callFunction({
name: 'collection_update',
data: {
id: _id
},
}).then(res => {
console.log(res.data)
})
.catch(console.error)
小程式雲端開發可以使用正規表示式進行模糊查詢。例如, 根據使用者輸入關鍵字,查詢標題中存在改關鍵字的古詩詞。
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) {
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)
參考文章:微信小程式中使用Async/await方法處理非同步請求
小程式中頁面觸發轉發的方式有兩種:
button
元件設定屬性open-type="share"
,可以在使用者點擊按鈕後觸發Page.onShareAppMessage 事件,如果目前頁面沒有定義此事件,則點擊後無效果。使用者還可以在Page.onShareAppMessage 事件中自訂轉送後顯示的標題、圖片、路徑:
onShareAppMessage(res) {
let id = wx.getStorageSync('shareId')
if (res.from === 'button') {
// 来自页面内转发按钮
console.log(res.target)
}
return {
title: `跟我一起挑战最长的成语接龙吧!`,
path: `pages/find/find`,
imageUrl: '/images/img.jpg',
}
},
詳情請參考文章:微信小程式之授權
數據表中明明有數據,但是collection.get 到的卻為空。解決:可以在雲端開發控制台中開啟資料庫權限設置,設定權限。
collection.update 函數呼叫成功單回傳的卻是0行記錄被更新,因為小程式端不允許更新沒有openid 欄位的資料。解決:可以透過雲端函數更新資料庫。
解決:1:將圖片上傳到伺服器,填寫伺服器上的圖片路徑位址。 2:將圖片轉為base64 編碼。
原因:請看文件:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/import.html
解:去掉json資料{}
之間的逗號, 如果最外層為[]
,也必須去掉, 最終形如:
{
"index": "作者_1",
"type": "作者",
"poet": "李白",
"abstract": "李白(701年-762年),字太白,号青莲居士,唐朝浪漫主义诗人,被后人誉为“诗仙”..."
}
{
"index": "作者_2",
"type": "作者",
"poet": "白居易",
"abstract": "白居易(772年-846年),字乐天,号香山居士..."
}