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, и пользователи могут добавлять, удалять, изменять и запрашивать базу данных непосредственно в облаке. Однако мини-программа накладывает определенные ограничения на разрешения пользователя на работу с данными (например, обновление данных, одноразовое получение). ограничение количества записей и т. д.), поэтому для работы с базой данных здесь в основном используются облачные функции.
Щелкните правой кнопкой мыши корневой каталог функции и в контекстном меню выберите «Создать новую облачную функцию Node.js». Мы назовем облачную функцию «коллекция_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 для обработки асинхронных запросов в апплете WeChat
Есть два способа вызвать переадресацию страниц в мини-программах:
open-type="share"
для компонента button
, событие 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',
}
},
Подробности читайте в статье: Авторизация мини-программ WeChat.
Очевидно, что в таблице данных есть данные, но то, что получает 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年),字乐天,号香山居士..."
}