博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信小程序云开发项目实战进阶 - 诗词大全&成语接龙
阅读量:6701 次
发布时间:2019-06-25

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

1. 小程序功能

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

2. 小程序地址

3. 小程序预览:

o_WechatIMG732.jpg

4. 部分截图

首页

o_1558438424141.jpg

列表页

o_1558438667474.jpg

详情页 分享页

o_1558438974751.jpg

唐诗宋词

o_1558438795089.jpg

成语接龙

o_1558438538843.jpg

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.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)

7. 数据库模糊查询

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

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)

8. 使用 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 数据失败

原因:请看文档:

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

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

转载于:https://www.cnblogs.com/cckui/p/10228795.html

你可能感兴趣的文章
Oracle PL/SQL匿名块(三)
查看>>
模拟实现strstr
查看>>
解决Office系列安装不上的办法
查看>>
vimdiff的简单使用
查看>>
我的友情链接
查看>>
工作的习惯,看到好收藏下
查看>>
利用ACS来实现AAA服务
查看>>
国内开源镜像站
查看>>
vb.net中东软医保接口的调用
查看>>
java 消息摘要算法MD
查看>>
Web Service security UserNameToken 使用
查看>>
I/O重定向
查看>>
去除vue项目中的#及其ie9兼容性
查看>>
linux实例 批量修改图片文件名
查看>>
day15(mysql 的多表查询,事务)
查看>>
IOS
查看>>
beta冲刺第三天
查看>>
beta第二天
查看>>
工作中常用的但是又容易忽略的问题
查看>>
css特殊情况
查看>>