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

1. 小程序功能

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

2. 小程序预览:



0

3. 部分截图

首页

0

列表页

0

详情页 分享页

0

唐诗宋词

0

成语接龙

0

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相关的技术故事/技术实战经验想要跟大家分享,欢迎留言联系我们哦~比心!

aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9rbkhKUTZycDJJdTRqREU0Y1BzaWIxdEJvbTVCUWpyMFppYTJ6M21mUkpoVFppYmljdjFydFVHVTdZeWN3SXZYdUJPY3o3a3htaWNBVWhZUGlhdWljeERpYjQycllnLzA#pic_center

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis学习(50):嵌套查询

数据库表 数据库叫blog_gp1701 author表 数据 blog表 数据 comment表 数据 post表 数据 目录结构 jar包导入 先给对应的jar包导入 建立一个junit单元测试 配置文件 log4j.properties ### \u914D\u7F6E\u6839 ### log4j.rootLogger debug,console ,fileAppender,dailyRo…

《WF编程》系列之3 - 漫游工作流:Visual Studio 2005 扩展

《WF编程》系列之3 - 漫游工作流:Visual Studio 2005 扩展 1.2.2 Visual Studio 2005 扩展 Microsoft提供了一个Visual Studio 2005 的工作流扩展(Microsoft Visual Studio 2005 Extensions for Windows Workflow)其中包含用于构建工作流的可视化设计器. 活动排列在工具箱里,可…

只需20小时,让0基础的你掌握小程序云开发!这个暑假,约否?

今天的故事要从小开和小发这对好基友的假期说起...... 没错!他来了,他来了,云开发带着小程序开发夏令营最新情报向我们走来了! 为了让更多的童鞋享受高效率、“在云上”掌握小程序开发这一热门技术,也为了解决大家自学…

Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

去空格及特殊符号 s.strip().lstrip().rstrip(,) 复制字符串 #strcpy(sStr1,sStr2) sStr1 strcpy sStr2 sStr1 sStr1 strcpy2 print sStr2 连接字符串 #strcat(sStr1,sStr2) sStr1 strcat sStr2 append sStr1 sStr2 print sStr1 查找字符 #strchr(sStr1,sStr2) # < 0 …

mybatis学习(52):扩展结果的展现

首先使用逆向工程创建相关类 数据库表 author blog 新建一个项目&#xff0c;将逆向工程的生成的拷贝进来 配置文件 log4j.properties ### \u914D\u7F6E\u6839 ### log4j.rootLogger debug,console ,fileAppender,dailyRollingFile,ROLLING_FILE,MAIL,DATABASE### \u8BBE\…

统计HDFS文件数量,大小,以及在某范围大小的文件数量

统计HDFS文件数量大小&#xff0c;小于20M文件数量 hadoop fs -du -h / # 统计文件大小hadoop fs -count / # 统计文件数量&#xff0c;返回的数据是目录个数&#xff0c;文件个数&#xff0c;文件总计大小&#xff0c;输入路径hadoop fs -ls -R /path/data | grep ^- > ~/d…

mybatis学习(53):构造方法映射

数据库表 数据库叫blog_gp1701 author表 数据 blog表 数据 comment表 数据 post表 数据 目录结构 jar包导入 先给对应的jar包导入 建立一个junit单元测试 配置文件 log4j.properties ### \u914D\u7F6E\u6839 ### log4j.rootLogger debug,console ,fileAppender,dailyRo…

python 实现统计ftp服务器指定目录下文件夹数目、文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏。 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小

python 实现统计ftp服务器指定目录下文件夹数目、文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏。 主要要求&#xff1a;指定目录下&#xff0c;文件夹数目/文件数目/所有文件大小&#xff0c;类似Windows如下功能&#xff1a; 模块介绍&…

Linux 内核编码风格【转】

原文&#xff1a;http://www.cnblogs.com/baochuan/archive/2013/04/08/3006615.htmlLinux 内核编码风格序像其他大型软件一样&#xff0c;Linux制订了一套编码风格&#xff0c;对代码的格式、风格和布局做出了规定。我写这篇的目的也就是希望大家能够从中借鉴&#xff0c;有利…

mybatis学习(54):鉴定器

数据库表 数据库叫blog_gp1701 author表 数据 blog表 数据 comment表 数据 post表 数据 vechcle 目录结构 jar包导入 先给对应的jar包导入 建立一个junit单元测试 配置文件 log4j.properties ### \u914D\u7F6E\u6839 ### log4j.rootLogger debug,console ,fileAppender…

hadoop fs:du统计hdfs文件(目录下文件)大小的用法

hadoop fs:du统计hdfs文件&#xff08;目录下文件&#xff09;大小的用法 hadoop fs 更多用法&#xff0c;请参考官网&#xff1a;http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html 以下是我的使用统计文件时使用的记录&#xff1a; [tdv00938 ~]$ hadoop fs -ls /jc_…

sqoop操作之Oracle导入到HDFS

导入表的所有字段 sqoop import --connect jdbc:oracle:thin:192.168.1.100:1521:ORCL \ --username SCOTT --password tiger \ --table EMP -m 1; 查看执行结果&#xff1a; hadoop fs -cat /user/hadoop/EMP/part-m-00000 7369,SMITH,CLERK,7902,1980-12-17 00:00:00.0,800,n…

ps学习1:去除图片上的文字

首先我们看到如图所示的图&#xff0c;这个时候我们要给他右上角的文字去除 首先打开我们的ps工具--我登陆的在线ps教程 https://www.uupoop.com/ 点击编辑---填充 保存 完成修改

Java面试题16 牛客 以下java程序代码,执行后的结果是()

Java面试题16 牛客 以下java程序代码&#xff0c;执行后的结果是&#xff08;&#xff09; 1 2 3 4 5 6 7 8 9 10 public class Test { public static void main(String[] args) { Object o new Object() { public boolean equals(Object o…

Hive压缩说明

为什么要压缩 在Hive中对中间数据或最终数据做压缩&#xff0c;是提高数据吞吐量和性能的一种手段。对数据做压缩&#xff0c;可以大量减少磁盘的存储空间&#xff0c;比如基于文本的数据文件&#xff0c;可以将文件压缩40%或更多。同时压缩后的文件在磁盘间传输和I/O也会大大减…

kubelet源码学习(一):kubelet工作原理、kubelet启动过程

本文基于Kubernetes v1.22.4版本进行源码学习 1、kubelet工作原理 1&#xff09;、kubelet核心工作 kubelet的工作核心就是一个控制循环&#xff0c;即&#xff1a;SyncLoop&#xff08;图中的大圆圈&#xff09;。而驱动这个控制循环运行的事件&#xff0c;包括&#xff1a;P…

Java面试题18 牛客 假定Base b = new Derived();

Java面试题18 牛客 假定Base b new Derived&#xff08;&#xff09;; 调用执行b.methodOne&#xff08;&#xff09;后&#xff0c;输出结果是什么&#xff1f; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 public class Base { public…

ReactOS,硬件抽象层,HAL概述

分析环境reactos0.3.4 &#xff0c;i386体系] ReactOS的硬件抽象层 HAL(Hardware Abstraction Layer)位于OS与硬件的中间&#xff0c;和windows的hal原理基本一致&#xff0c;硬件抽象层隐藏特定平台的硬件接口细节&#xff0c;为上层的系统提供标准的稳定的虚拟硬件平台&…

[给ASP.NET 初学者的话]不要练功练了三年,才发现自己必须「砍掉重练」!....学习ASP.NET之前,请先把自己杯中的水倒掉...

这是我的文章备份&#xff0c;原文请看&#xff1a; [给ASP.NET 初学者的话]不要练功练了三年&#xff0c;才发现自己必须「砍掉重练」&#xff01;....学习ASP.NET之前&#xff0c;请先把自己杯中的水倒掉 http://www.dotblogs.com.tw/mis2000lab/archive/2012/03/15/game_ove…

Java面试题19 牛客下面有关java的引用类型,说法正确的有?

Java面试题19下面有关java的引用类型&#xff0c;说法正确的有&#xff1f; A:对于一个对象来说&#xff0c;只要有强引用的存在&#xff0c;它就会一直存在于内存中 B&#xff1a;如果一个对象仅持有虚引用&#xff0c;那么它就和没有任何引用一样&#xff0c;在任何时候都可…