1. 小顺序功用
- 古诗词大全
- 成语大全
- 成语接龙
- 诗词飞花令
- 诗词分享、珍藏
- 诗词接龙
- 唐诗宋词起名字
- 百家姓
- 猜谜语
2. 小顺序地点
https://github.com/caochangkui/miniprogram-project
3. 小顺序预览:
5. 项目构造
.
├── 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 // 全局款式
6. 封装云函数操纵数据库
本项目是运用的小顺序云开辟。云开辟供应了一个 JSON 数据库,用户能够直接在云端举行数据库增编削查,然则,小顺序对用户操纵数据的权限举行了肯定的限定(比方数据update、一次性get纪录的条数限定等),所以,这里重要采纳云函数来操纵数据库。
查询数据、分页查询
函数根目次上右键,在右键菜单中,挑选建立一个新的 Node.js 云函数,我们将该云函数命名为 collection_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)
}
}
运用 collection_get 云函数
比方,依据查询前提{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)
}
}
运用 collection_update 云函数
更新某_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)
7. 数据库隐约查询
小顺序云开辟能够运用正则表达式举行隐约查询。比方, 依据用户输入关键词,查询题目中存在改关键词的古诗词。
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)
8. 运用 async/await 处置惩罚异步
参考文章:微信小顺序中运用Async/await要领处置惩罚异步要求
9. 分享或转发功用
小顺序中页面触发转发的体式格局有两种:
- 1.在小顺序的右上角挑选转发,须要定义函数 Page.onShareAppMessage,假如当前页面没有定义此事宜,则点击后无结果。
- 2.经由过程给
button
组件设置属性open-type="share"
,能够在用户点击按钮后触发 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',
}
},
注重:转发胜利/失利的 callback 已被官方烧毁,所以理论上小顺序是没法得知用户是不是将页面分享胜利的
10. 用户受权
详情请参考文章:微信小顺序之受权
11. 须要注重的几个坑
查询不到数据
数据表中明显有数据,然则 collection.get 到的却为空。处理:能够在云开辟掌握台中翻开数据库权限设置,设置权限。
更新数据失利
collection.update 函数挪用胜利单返回的倒是0行纪录被更新,由于小顺序端不允许更新没有 openid 字段的数据。处理:能够经由过程云函数更新数据库。
background 图片 url 不能为当地图片
处理:1:将图片上传到服务器,填写服务器上的图片途径地点。2:将图片转为 base64 编码。
往云数据库中批量导入 json 数据失利
缘由:请看文档: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年),字乐天,号香山居士..."
}