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 projeto usa desenvolvimento em nuvem de pequenos programas. O desenvolvimento em nuvem fornece um banco de dados JSON e os usuários podem adicionar, excluir, modificar e consultar o banco de dados diretamente na nuvem. No entanto, o miniprograma impõe certas restrições às permissões do usuário para operar dados (como atualização de dados, obtenção única). limite de número de registro, etc.). Portanto, as funções de nuvem são usadas principalmente aqui para operar o banco de dados.
Clique com o botão direito no diretório raiz da função e, no menu do botão direito, selecione Criar uma nova função de nuvem Node.js. Chamamos a função de nuvem de coleção_get.
Edite 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 exemplo, consulte a lista de poemas de acordo com as condições de consulta {tags: '唐诗三百首'}
e cada página num = 10
dados:
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)
}
Observe que quando adicionamos registros ao banco de dados, o sistema adicionará automaticamente o campo openid
do usuário a cada registro para nós. No entanto, se a tabela de dados for importada por nós mesmos usando um arquivo json/csv, não haverá campo openid
em. desta vez, ao atualizar esta tabela de dados, o sistema pensará que você não é o criador, portanto ela não poderá ser atualizada.
Neste momento, você precisa atualizar o banco de dados por meio da função de nuvem, criar uma nova função de nuvem collection_update e 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)
}
}
Atualize o número de pessoas que abrem determinados dados _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)
O desenvolvimento em nuvem de miniprogramas pode usar expressões regulares para realizar consultas difusas. Por exemplo, com base na entrada de palavras-chave do usuário, o título da consulta contém poemas antigos com as palavras-chave alteradas.
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)
Artigo de referência: Usando o método Async/await para lidar com solicitações assíncronas no miniaplicativo WeChat
Existem duas maneiras de acionar o encaminhamento de páginas em miniprogramas:
open-type="share"
para button
, o evento Page.onShareAppMessage pode ser acionado após o usuário clicar no botão. Se este evento não estiver definido na página atual, não haverá efeito após. clicando.Os usuários também podem personalizar o título, a imagem e o caminho exibidos após o encaminhamento no 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 obter detalhes, consulte o artigo: Autorização de Miniprogramas WeChat
Obviamente há dados na tabela de dados, mas o que collection.get obtém está vazio. Solução: você pode abrir as configurações de permissão do banco de dados no console de desenvolvimento em nuvem e definir permissões.
A chamada bem-sucedida para a função collection.update retorna que 0 linhas de registros foram atualizadas, porque o applet não permite a atualização de dados sem um campo openid. Solução: O banco de dados pode ser atualizado através de funções de nuvem.
Solução: 1: Faça upload da imagem para o servidor e preencha o endereço do caminho da imagem no servidor. 2: Converta a imagem para codificação base64.
Motivo: consulte o documento: https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/import.html
Solução: Remova as vírgulas entre {}
nos dados json. Se a camada mais externa for []
, ela também deverá ser removida.
{
"index": "作者_1",
"type": "作者",
"poet": "李白",
"abstract": "李白(701年-762年),字太白,号青莲居士,唐朝浪漫主义诗人,被后人誉为“诗仙”..."
}
{
"index": "作者_2",
"type": "作者",
"poet": "白居易",
"abstract": "白居易(772年-846年),字乐天,号香山居士..."
}