1. 小程序功能

  • 古诗词大全
  • 成语大全
  • 成语接龙
  • 诗词飞花令
  • 诗词分享、收藏
  • 诗词接龙
  • 唐诗宋词起名字
  • 百家姓
  • 猜谜语

2. 小程序预览:

3. 部分截图

首页

列表页

详情页 分享页

唐诗宋词

成语接龙

4. 项目结构

.
├── 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                                      // 全局样式

5. 封装云函数操作数据库

本项目是使用的小程序云开发。云开发提供了一个 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} = eventconsole.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 = thisthis.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.datalist.push(...res_data)that.setData({list,page: page + 1, // 页面加1loading: 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.commandexports.main = async (event, context) => {const { id } = eventconsole.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)

6. 数据库模糊查询

小程序云开发可以使用正则表达式进行模糊查询。例如, 根据用户输入关键词,查询标题中存在改关键词的古诗词。

let database = 'gushici'
let condition =  {name: {$regex:'.*'+ inputValue,$options: 'i'}
}let { list, page, num } = this.data
let that = thisthis.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.datalist.push(...res_data)that.setData({list,loading: false})}
})
.catch(console.error)

7. 分享或转发功能

小程序中页面触发转发的方式有两种:

  • 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 已经被官方废弃,所以理论上小程序是无法得知用户是否将页面分享成功的

8. 用户授权

详情请参考文章:微信小程序之授权

9. 需要注意的几个坑

查询不到数据

数据表中明明有数据,但是 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年),字乐天,号香山居士..."
}

源码链接

https://github.com/TencentCloudBase/Good-practice-tutorial-recommended


如果你有关于使用云开发CloudBase相关的技术故事/技术实战经验想要跟大家分享,欢迎留言联系我们哦~比心!

转载于:https://www.cnblogs.com/CloudBase/p/11325702.html

诗词歌赋,样样精通!诗词古语小程序带你领略魅力古风丨实战相关推荐

  1. 第九代小冰惊喜登场,多端融合且琴棋书画样样精通

    谈及智能助手,相信大家都不会漏过小冰这款具有划时代意义的产品.从最初的微软小冰到现在的第九代小冰,AI的技术在不断的演进,而小冰也从最初的贴心助手变成了如今琴棋书画样样精通的人工智能前沿技术载体. 北 ...

  2. 清华大学计算机系九推,人工智能琴棋诗画样样精通,就问你怕不怕 | 清华大学计算机系智能体晚会...

    搜狗CEO王小川在清华计算机系智能体晚会现场 都说古代的才子要琴棋诗画样样精通,到了今天,真正能做到这四样的人早已凤毛麟角,然而在人工智能面前,这都不是事儿. 2017 年 11 月 23 日,由搜狗 ...

  3. 社区论坛小程序带订阅功能

    介绍: 社区论坛小程序带订阅功能,添加了订阅功能,如果有大神,也可以继续深度二开! 网盘下载地址: http://www.zijiepan2.xyz/yyYNryHPswX0 图片:

  4. wordpress个人博客小程序带流量主+教程

    介绍: wordpress博客小程序带流量主,教你15分钟学会,内附搭建教程,自行研究! 网盘下载地址: http://www.zijiepan2.xyz/XDHmBavZnsT0 图片:

  5. 【疯狂诗词大会小程序2.0】功能模块+前端+诗词答题小程序+内置数千道题目+开箱即用

    源码简介与安装说明: 模块介绍: 诗词答题小程序,支持单项选择题.文字线索题.看图猜诗词.读诗句猜谜等题目类型. 内置数千道题目,开箱即用.随机出题,先易后难. 诗词同步学,每一道诗题都配备了优质的诗 ...

  6. 逍遥情缘服务器维护没通告,《逍遥情缘》铁匠惨遭失业 玩家居然打造合成修理样样精通...

    在许多游戏中,玩家们每天都要面见一大堆NPC,花钱求着他们办这办那,才能继续游戏的进程.然而在<逍遥情缘>中,这一现象却大大不同,甚至连技艺高超的铁匠铺老板王大锤都已经在失业的边缘,沦落到 ...

  7. 微信小程序带给我们哪些便利

    大家都说小程序使用好之后,能够给我们的生活带来很大的便利.那么,小程序究竟能够为我们带来什么便利呢?如何用小程序带给我们的便利赚钱?下面跟随小编具体来了解一下. 带给我们的便利有: 1. 减轻手机负担 ...

  8. 完整答题小程序带流量主激励广告强点源码(答题小程序模板+题库)

    源码简介: ​答题小程序带流量主激励广告强点源码(答题小程序模板+题库),完整答题小程序源码有题库,无加密,带激励广告强制点击可提升广告收益.​ 下载链接 网盘源码   密码:3lev 背景 完整答题 ...

  9. 自动更新漫画小程序带流量主源码下载

    自动更新漫画小程序带流量主源码下载,后台特别简单就一个php文件,丢到服务器上,然后上小程序后台配置一下合法域名即可.后台:上传后台到宝塔面板,网站设置thinkphp伪静态,开启SSL前台:微信开发 ...

最新文章

  1. (chap9 基于HTTP的功能追加协议) WebSocket使用浏览器进行全双工通信
  2. Java黑皮书课后题第5章:*5.44(计算机体系结构:比特级的操作)一个short型值用16位比特存储。编写程序,提示用户输入一个short型的整数,然后显示这个整数的16比特形式,下面是运行示例
  3. java编程基础素数实验报告,JAVA 基础编程练习题1 (输出素数)
  4. 简体中文 Windows 7 Beta 体验(图)
  5. 微信小程序srt_微信小程序微商城(八):缓存实现商品购物车功能
  6. LeetCode 100. Same Tree
  7. opencv中的Mat图使用CDC显示
  8. oracle数据库创建表空间和表临时空间
  9. 网站后台测试软件,WebCrack:网站后台弱口令批量检测工具
  10. 操作系统学习笔记:大容量存储器的结构
  11. java nio 坑_把Java的nio坑逐个踩一遍
  12. have datatype/md5sum 相关的错误 IndentationError: unexpected indent
  13. java中set和get用法_java中 set 和 get
  14. Win10文件夹Shift+右键菜单添加打开管理员Powershell窗口
  15. 中国大学mooc南京航空航天大学民航运输概论章节作业及测试
  16. 线代【二次型】--猴博士爱讲课
  17. centos7查看进程ps_centos如何查看进程
  18. 币泳金:理安全的储存数字货币,冷钱包与热钱包的管理
  19. 计算机网络管理员路由与交换深圳积多少分,深圳积分入户初级证可以 累积加分吗,你需要知道这些!...
  20. SiteRAS一款外贸网站SEO分析工具,给您的网站做个深度体检

热门文章

  1. setInterval 和setTimeout 清空定时器,返回值,赋值为null的区别
  2. 基于Colab Pro Google Drive的Kaggle实战
  3. 常见的数据增强项目和论文介绍
  4. 算法之排序算法-直接插入排序
  5. python tornado对接权限中心的sdk封装
  6. Mac OS X Terminal 101:终端使用初级教程以及Xcode
  7. CLR线程概览(一)
  8. 选项卡,下拉菜单操做时的页面数据更新,highcharts,d3 结合。
  9. WPF自定义控件 —— 装饰器
  10. 分布式文件系统虚拟目录及命名空间的实现方法