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 // 全局样式
Ce projet utilise le développement de petits programmes cloud. Le développement cloud fournit une base de données JSON et les utilisateurs peuvent ajouter, supprimer, modifier et interroger la base de données directement dans le cloud. Cependant, le mini-programme impose certaines restrictions sur les autorisations de l'utilisateur pour exploiter les données (telles que la mise à jour des données, l'obtention unique). limite du nombre d'enregistrements, etc.). Par conséquent, les fonctions cloud sont principalement utilisées ici pour faire fonctionner la base de données.
Cliquez avec le bouton droit sur le répertoire racine de la fonction et dans le menu contextuel, sélectionnez Créer une nouvelle fonction cloud Node.js. Nous nommons la fonction cloud collection_get.
Modifier 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)
}
}
Par exemple, interrogez la liste des poèmes en fonction des conditions de requête {tags: '唐诗三百首'}
, et chaque page num = 10
éléments de données :
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)
}
Notez que lorsque nous ajoutons des enregistrements à la base de données, le système ajoutera automatiquement le champ openid
de l'utilisateur à chaque enregistrement. Cependant, si la table de données est importée par nous-mêmes à l'aide d'un fichier json/csv, il n'y aura pas de champ openid
. cette fois, lors de la mise à jour de cette table de données, le système pensera que vous n'êtes pas le créateur, elle ne pourra donc pas être mise à jour.
À ce stade, vous devez mettre à jour la base de données via la fonction cloud, créer une nouvelle fonction cloud collection_update et modifier 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)
}
}
Mettez à jour le nombre de personnes qui ouvrent certaines données _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)
Le développement de mini-programmes cloud peut utiliser des expressions régulières pour effectuer des requêtes floues. Par exemple, selon les mots-clés saisis par l'utilisateur, le titre de la requête contient des poèmes anciens avec les mots-clés modifiés.
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)
Article de référence : Utilisation de la méthode Async/await pour gérer les requêtes asynchrones dans l'applet WeChat
Il existe deux manières de déclencher le transfert de pages dans les mini-programmes :
open-type="share"
sur button
, l'événement Page.onShareAppMessage peut être déclenché après que l'utilisateur a cliqué sur le bouton. Si cet événement n'est pas défini sur la page actuelle, il n'y aura aucun effet après. en cliquant.Les utilisateurs peuvent également personnaliser le titre, l'image et le chemin affichés après le transfert dans l'événement 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',
}
},
Pour plus de détails, veuillez vous référer à l'article : Autorisation des mini programmes WeChat
Il y a évidemment des données dans la table de données, mais ce que collection.get obtient est vide. Solution : Vous pouvez ouvrir les paramètres d'autorisation de la base de données dans la console de développement cloud et définir les autorisations.
L'appel réussi à la fonction collection.update renvoie que 0 ligne d'enregistrements a été mise à jour, car l'applet ne permet pas de mettre à jour les données sans champ openid. Solution : La base de données peut être mise à jour via les fonctions cloud.
Solution : 1 : Téléchargez l'image sur le serveur et indiquez l'adresse du chemin de l'image sur le serveur. 2 : Convertissez l'image en encodage base64.
Raison : Veuillez consulter le document : https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/import.html
Solution : supprimez les virgules entre {}
dans les données json. Si la couche la plus externe est []
, elle doit également être supprimée. Le formulaire final est le suivant :
{
"index": "作者_1",
"type": "作者",
"poet": "李白",
"abstract": "李白(701年-762年),字太白,号青莲居士,唐朝浪漫主义诗人,被后人誉为“诗仙”..."
}
{
"index": "作者_2",
"type": "作者",
"poet": "白居易",
"abstract": "白居易(772年-846年),字乐天,号香山居士..."
}