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 // 全局样式
Dieses Projekt nutzt die Cloud-Entwicklung für kleine Programme. Die Cloud-Entwicklung stellt eine JSON-Datenbank bereit, und Benutzer können die Datenbank direkt in der Cloud hinzufügen, löschen, ändern und abfragen. Das Miniprogramm unterliegt jedoch bestimmten Einschränkungen für die Berechtigungen des Benutzers zum Betreiben von Daten (z. B. Datenaktualisierung, einmaliges Abrufen). Datensatzanzahlbegrenzung usw.). Daher werden hier hauptsächlich Cloud-Funktionen zum Betrieb der Datenbank genutzt.
Klicken Sie mit der rechten Maustaste auf das Stammverzeichnis der Funktion und wählen Sie im Kontextmenü die Option „Neue Node.js-Cloud-Funktion erstellen“ aus. Wir nennen die Cloud-Funktion „collection_get“.
Bearbeiten Sie 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)
}
}
Fragen Sie beispielsweise die Liste der Gedichte gemäß den Abfragebedingungen {tags: '唐诗三百首'}
ab, und jede Seite num = 10
Daten:
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)
}
Beachten Sie, dass das System beim Hinzufügen von Datensätzen zur Datenbank automatisch das openid
Feld des Benutzers zu jedem Datensatz hinzufügt. Wenn die Datentabelle jedoch von uns mithilfe einer JSON-/CSV-Datei importiert wird, ist kein openid
-Feld vorhanden Dieses Mal geht das System beim Aktualisieren dieser Datentabelle davon aus, dass Sie nicht der Ersteller sind, sodass sie nicht aktualisiert werden kann.
Zu diesem Zeitpunkt müssen Sie die Datenbank über die Cloud-Funktion aktualisieren, eine neue Cloud-Funktion „collection_update“ erstellen und index.js bearbeiten:
// 更新数据 - 根据 _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)
}
}
Aktualisieren Sie die Anzahl der Personen, die bestimmte _id-Daten öffnen:
let _id = e.currentTarget.dataset.id
wx.cloud.callFunction({
name: 'collection_update',
data: {
id: _id
},
}).then(res => {
console.log(res.data)
})
.catch(console.error)
Die Entwicklung von Mini-Programm-Clouds kann reguläre Ausdrücke verwenden, um Fuzzy-Abfragen durchzuführen. Beispielsweise enthält der Abfragetitel entsprechend der vom Benutzer eingegebenen Schlüsselwörter antike Gedichte mit den geänderten Schlüsselwörtern.
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)
Referenzartikel: Verwendung der Async/await-Methode zur Verarbeitung asynchroner Anfragen im WeChat-Applet
Es gibt zwei Möglichkeiten, die Weiterleitung von Seiten in Miniprogrammen auszulösen:
open-type="share"
auf button
kann das Page.onShareAppMessage-Ereignis ausgelöst werden, nachdem der Benutzer auf die Schaltfläche geklickt hat. Wenn dieses Ereignis auf der aktuellen Seite nicht definiert ist, hat es danach keine Auswirkung Klicken.Benutzer können auch den Titel, das Bild und den Pfad anpassen, die nach der Weiterleitung im Page.onShareAppMessage-Ereignis angezeigt werden:
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',
}
},
Einzelheiten finden Sie im Artikel: Autorisierung von WeChat-Miniprogrammen
Die Datentabelle enthält offensichtlich Daten, aber was „collection.get“ erhält, ist leer. Lösung: Sie können die Datenbankberechtigungseinstellungen in der Cloud-Entwicklungskonsole öffnen und Berechtigungen festlegen.
Der erfolgreiche Aufruf der Funktion „collection.update“ gibt zurück, dass 0 Datensatzzeilen aktualisiert wurden, da das Applet die Aktualisierung von Daten ohne ein openid-Feld nicht zulässt. Lösung: Die Datenbank kann über Cloud-Funktionen aktualisiert werden.
Lösung: 1: Laden Sie das Bild auf den Server hoch und geben Sie die Bildpfadadresse auf dem Server ein. 2: Konvertieren Sie das Bild in die Base64-Kodierung.
Grund: Bitte sehen Sie sich das Dokument an: https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/import.html
Lösung: Entfernen Sie die Kommas zwischen {}
in den JSON-Daten. Wenn die äußerste Ebene []
ist, muss sie auch entfernt werden.
{
"index": "作者_1",
"type": "作者",
"poet": "李白",
"abstract": "李白(701年-762年),字太白,号青莲居士,唐朝浪漫主义诗人,被后人誉为“诗仙”..."
}
{
"index": "作者_2",
"type": "作者",
"poet": "白居易",
"abstract": "白居易(772年-846年),字乐天,号香山居士..."
}