博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
诗词歌赋,样样精通!诗词古语小程序带你领略魅力古风丨实战
阅读量:5124 次
发布时间:2019-06-13

本文共 6157 字,大约阅读时间需要 20 分钟。

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} = 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.datalet 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.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.commandexports.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.idwx.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.datalet 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.data        list.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 数据失败

原因:请看文档:

解决:去掉json数据 {}之间的逗号, 如果最外层为 [],也必须去掉, 最终形如:

{    "index": "作者_1",    "type": "作者",    "poet": "李白",    "abstract": "李白(701年-762年),字太白,号青莲居士,唐朝浪漫主义诗人,被后人誉为“诗仙”..."}{    "index": "作者_2",    "type": "作者",    "poet": "白居易",    "abstract": "白居易(772年-846年),字乐天,号香山居士..."}

源码链接


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

aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9rbkhKUTZycDJJdTRqREU0Y1BzaWIxdEJvbTVCUWpyMFppYTJ6M21mUkpoVFppYmljdjFydFVHVTdZeWN3SXZYdUJPY3o3a3htaWNBVWhZUGlhdWljeERpYjQycllnLzA#pic_center

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

你可能感兴趣的文章
移动设备显示尺寸大全 CSS3媒体查询
查看>>
图片等比例缩放及图片上下剧中
查看>>
【转载】Linux screen 命令详解
查看>>
background-clip,background-origin
查看>>
Android 高级UI设计笔记12:ImageSwitcher图片切换器
查看>>
【Linux】ping命令详解
查看>>
对团队成员公开感谢博客
查看>>
java学习第三天
查看>>
python目录
查看>>
django+uwsgi+nginx+sqlite3部署+screen
查看>>
Andriod小型管理系统(Activity,SQLite库操作,ListView操作)(源代码下载)
查看>>
在Server上得到数据组装成HTML后导出到Excel。两种方法。
查看>>
浅谈项目需求变更管理
查看>>
经典算法系列一-快速排序
查看>>
设置java web工程中默认访问首页的几种方式
查看>>
ASP.NET MVC 拓展ViewResult实现word文档下载
查看>>
8、RDD持久化
查看>>
第二次团队冲刺--2
查看>>
VMware Tools安装
查看>>
Linux上架设boost的安装及配置过程
查看>>