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 // 全局样式
Este proyecto utiliza un pequeño programa de desarrollo en la nube. El desarrollo en la nube proporciona una base de datos JSON y los usuarios pueden agregar, eliminar, modificar y consultar la base de datos directamente en la nube. Sin embargo, el mini programa impone ciertas restricciones a los permisos del usuario para operar datos (como actualización de datos, obtención única). límite de número de registros, etc.). Por lo tanto, las funciones de la nube se utilizan principalmente aquí para operar la base de datos.
Haga clic derecho en el directorio raíz de la función y, en el menú contextual, seleccione Crear una nueva función en la nube de Node.js. Llamamos a la función en la nube collection_get.
Editar 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)
}
}
Por ejemplo, consulte la lista de poemas de acuerdo con las condiciones de consulta {tags: '唐诗三百首'}
, y cada página num = 10
datos:
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)
}
Tenga en cuenta que cuando agregamos registros a la base de datos, el sistema agregará automáticamente el campo openid
del usuario a cada registro. Sin embargo, si nosotros mismos importamos la tabla de datos usando un archivo json/csv, no habrá ningún campo openid
en. Esta vez, al actualizar esta tabla de datos, el sistema pensará que usted no es el creador, por lo que no se podrá actualizar.
En este momento, debe actualizar la base de datos a través de la función de la nube, crear una nueva función de la nube collection_update y editar 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)
}
}
Actualice la cantidad de personas que abren ciertos datos _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)
El desarrollo de miniprogramas en la nube puede utilizar expresiones regulares para realizar consultas difusas. Por ejemplo, según las palabras clave ingresadas por el usuario, el título de la consulta contiene poemas antiguos con las palabras clave modificadas.
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)
Artículo de referencia: Uso del método Async/await para manejar solicitudes asincrónicas en el subprograma WeChat
Hay dos formas de activar el reenvío de páginas en miniprogramas:
open-type="share"
en button
, el evento Page.onShareAppMessage se puede activar después de que el usuario haga clic en el botón. Si este evento no está definido en la página actual, no tendrá ningún efecto después. haciendo clic.Los usuarios también pueden personalizar el título, la imagen y la ruta que se muestran después del reenvío en el evento 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',
}
},
Para obtener más información, consulte el artículo: Autorización de miniprogramas WeChat
Obviamente hay datos en la tabla de datos, pero lo que obtiene collection.get está vacío. Solución: puede abrir la configuración de permisos de la base de datos en la consola de desarrollo de la nube y establecer permisos.
La llamada exitosa a la función collection.update devuelve que se han actualizado 0 filas de registros, porque el subprograma no permite actualizar datos sin un campo openid. Solución: La base de datos se puede actualizar mediante funciones de la nube.
Solución: 1: Cargue la imagen en el servidor y complete la dirección de ruta de la imagen en el servidor. 2: Convierta la imagen a codificación base64.
Motivo: consulte el documento: https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/import.html
Solución: elimine las comas entre {}
en los datos json. Si la capa más externa es []
, también se debe eliminar. El formato final es el siguiente:
{
"index": "作者_1",
"type": "作者",
"poet": "李白",
"abstract": "李白(701年-762年),字太白,号青莲居士,唐朝浪漫主义诗人,被后人誉为“诗仙”..."
}
{
"index": "作者_2",
"type": "作者",
"poet": "白居易",
"abstract": "白居易(772年-846年),字乐天,号香山居士..."
}