小程序云开发实战 - 口袋工具之“历史上的今天”

前言

本项目是一个基于云开发的小程序。

本文选取项目中的一个页面 -- 历史上的今天 来做一个云开发的分享,会涉及云函数和云数据库。

由于是实战项目,关于小程序的基础知识请移步官方文档,本文不再赘述。

项目预览

  • 微信搜索: 口袋工具y

  • 扫一扫:

0

前期遇到的问题

  • 数据来源:没有数据,寸步难行呀

如何解决数据来源

  • 编写爬虫将需要的数据爬取并保存下来

  • 找一些提供数据的平台,如阿凡达数据、聚合数据等等。

本项目选择第二种方式,并最终选择了聚合数据平台API。

项目开始

新建项目

  • 新建项目,配置好名称、目录、AppID等信息,后端服务选择小程序·云开发,点击新建。

关于AppID: 请自行修改为你注册的小程序AppID。

0

  • 点击新建即可完成项目初始化,得到一个云开发模板:

项目目录

目录结构:

+-- cloudfunctions|[指定的环境]  // 存放云函数的目录+-- miniprogram                 // 小程序代码编写目录|-- README.md                   // 项目描述文件|-- project.config.json         // 项目配置文件

新建云开发环境

  • 点击左上角菜单项 云开发

0

  • 点击创建资源环境,环境名称及环境ID请自行设置:

0

  • 点击确定即可完成创建

编写云函数

1. 新建云函数

在目录 cloudfunctions 上右键
新建云函数,填入新建云函数的名称(如todayInHistory)
回车或失去焦点即会自动创建并上传。

2. 安装依赖

云函数目前执行环境仅支持node,所以需要使用js来编写云函数的逻辑。
在控制台中进入该云函数的目录,执行

npm i -S axios

本项目使用axios来执行请求的发送,可以使用其他如request-promise等等的库来替换

3. 编写云函数

  • 新建 config.js 文件,添加代码如下:
exports.key = YOUR_JUHE_KEY // 在聚合数据平台申请的key
exports.baseUrl = 'http://v.juhe.cn/todayOnhistory/queryEvent.php'
  • 打开 ·index.js· 文件,编写代码:
// 云函数入口文件
const cloud = require('wx-server-sdk')
const axios = require('axios')cloud.init()
const db = cloud.database()// 聚合数据
const { baseUrl, key } = require('./config')// 云函数入口函数
exports.main = async(event, context) => {const {month,day} = eventconst resp = await axios.get(baseUrl, {params: {key,date: `${month}/${day}`}}).then(res => {return res.data})return resp.result
}

编写页面

1. 新建页面

在开发小程序的过程中,新建一个页面是很常见的操作,有两个非常方便的方式:

  • app.json 文件中,在pages项添加我们需要的页面路径,直接保存即可。如:
"pages": ["pages/today-in-history/index"
]
  • pages 目录下新建目录 today-in-history ,在新建的目录上 右键 -> 新建page , 填入名称如index , 回车即可完成页面下四个文件的创建

2. 编写 index.wxml

<view class="container"><view class="header full-width"><view>{{year}}年{{month}}月{{day}}日</view></view><view class="content full-width"><view class="list-view"><block wx:for="{{list}}" wx:key="index"><view class="item-title">{{item.title}}</view><view class="item-date">{{item.date}}</view></block></view></view>
</view>

3. 编写 index.js

// pages/today-in-history/index.js
Page({/*** 页面的初始数据*/data: {year: 1990,month: 1,day: 1,list: []},/*** 生命周期函数--监听页面加载*/onLoad: function() {const now = new Date();const year = now.getFullYear();const month = now.getMonth() + 1;const day = now.getDate();this.setData({year,month,day});this.doGetList();},/*** 执行数据获取*/doGetList: function() {const {month,day} = this.data;wx.cloud.callFunction({name: 'todayInHistory',data: {month,day}}).then(res => {let list = res.result.reverse();this.setData({list});}).catch(console.error)}
})

4. 编写 index.wxss

/* pages/today-in-history/index.wxss */
.container {padding-bottom: 20rpx;background-color: #E8D3A9;
}.header {display: flex;justify-content: space-around;align-items: center;height: 80rpx;color: #FFF;
}.content {flex: 1;
}.list-view {height: 100%;display: flex;flex-direction: column;padding: 0 20rpx;
}.list-item {display: flex;flex-direction: column;border-radius: 10rpx;padding: 16rpx 0;box-sizing: border-box;margin-top: 20rpx;background-color: #fff;text-align: center;box-shadow: 1px 1px 5px 1px rgb(207, 207, 207);
}.item-title {font-size: 36rpx;padding: 10rpx 16rpx;color: #262626;line-height: 48rpx;
}

5. 效果预览

到这里我们完成了 历史上的今天 的列表页,效果如下:

0

添加日期选择器

1. 引入 vantweapp

项目中使用 wantweapp 的部分组件

  • 安装
# npmnpm i vant-weapp -S --production# yarnyarn add vant-weapp --production
  • 构建npm

点击开发者工具菜单项 工具 -> 构建npm
程序将自动构建已安装的依赖

2. 在 app.json 引入组件

 "usingComponents": {"van-datetime-picker": "/miniprogram_npm/vant-weapp/datetime-picker/index","van-popup": "/miniprogram_npm/vant-weapp/popup/index","van-toast": "/miniprogram_npm/vant-weapp/toast/index"}

3. 修改 index.wxml

添加下面的代码

<view class="full-width"><van-popup show="{{ show }}" position="bottom"><van-datetime-pickertype="date"value="{{ currentDate }}"bind:cancel="onCancel"bind:confirm="onConfirm"/></van-popup>
</view>
<van-toast id="van-toast" />

4. 修改 index.js

  • 引入 Toast
import Toast from '../../miniprogram_npm/vant-weapp/toast/toast';
  • data 添加 属性
data: {year: 1990,month: 1,day: 1,list: [],show: false,currentDate: Date.now()
}
  • 添加 监听方法
/*** 监听日期选择*/
onChangeDate: function() {this.setData({show: true});
},/*** 监听取消*/
onCancel: function() {this.setData({show: false});
},/*** 监听确定*/
onConfirm: function(event) {const date = new Date(event.detail);const year = date.getFullYear();const month = date.getMonth() + 1;const day = date.getDate();this.setData({year,month,day,show: false});this.doGetList();
}
  • 最后修改 doGetList ,添加loading
/*** 执行数据获取*/
doGetList: function() {const {month,day} = this.data;Toast.loading({mask: true,message: '加载中...'});wx.cloud.callFunction({name: 'todayInHistory',data: {month,day}}).then(res => {let list = res.result.reverse();this.setData({list});Toast.clear();}).catch(console.error)
}

5. 效果如下

列表

切换日期

补充

  • 由于聚合数据平台API非会员调用次数有限(100次/天),明显是不太够用的。因此,我们可以考虑在请求到数据时,将数据存在云数据库中,其实也就实现了一个类似爬虫的功能啦。流程如下::梵

0

代码实现:

  • 修改 cloudfunctions/todayInHistory/index.js
// ... 省略其他无需改动的代码
exports.main = async(event, context) => {const {month,day} = eventconst ret = await db.collection('todayInHistory').where({date: `${month}/${day}`}).get()if (ret.data.length > 0) {return ret.data[0].result}const resp = await axios.get(baseUrl, {params: {key,date: `${month}/${day}`}}).then(res => {return res.data})await db.collection('todayInHistory').add({data: {date: `${month}/${day}`,result: resp.result}})return resp.result
}
···

结语

目前只开发了两个小功能 历史上的今天周公解梦 ,后续会继续开发新的功能,希望可以做成一个小工具集合,这也是 口袋工具 这个名称的由来。

感谢各位读者的阅读,由于本人水平有限,文章中如有错误或不妥之处,请不吝赐教!

如果你喜欢这篇文章或是这个项目,不妨进去GitHub链接点个Star支持下 today。

源码链接

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

1649686-20190730104803030-1754179115.png

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

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

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

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

相关文章

第一百五十三期: 云迁移可能失败的5种方式以及成功的5种方式

通过将应用程序迁移到云平台中&#xff0c;企业可以提高安全性、数据访问、可扩展性和IT灵活性。将业务迁移到云平台还可以为企业节省成本。以下是导致企业云迁移失败的五个主要原因以及其解决方法。 作者&#xff1a;Andy Patrizio 对于大多数企业而言&#xff0c;将业务迁移…

每天一个linux命令(30): chown命令

原文地址&#xff1a;http://www.cnblogs.com/peida/archive/2012/12/04/2800684.html chown将指定文件的拥有者改为指定的用户或组&#xff0c;用户可以是用户名或者用户ID&#xff1b;组可以是组名或者组ID&#xff1b;文件是以空格分开的要改变权限的文件列表&#xff0c;支…

mybatis学习(14):log4j:ERROR Category option 1 not a decimal integer.

log4j:ERROR Category option " 1 " not a decimal integer. java.lang.NumberFormatException: For input string: " 1 " 修改log4j.xml配置文件 ### \u914D\u7F6E\u6839 ### log4j.rootLogger debug,console ,fileAppender,dailyRollingFile,ROLLING_…

在PEA上海做演讲主题:大型、高负载网站架构和应用初探

主题&#xff1a;大型、高负载网站架构和应用初探时间&#xff1a;30-45分钟 开题&#xff1a;163,sina,sohu等网站他们有很多应用程序都是PHP写的&#xff0c;为什么他们究竟是如何能做出同时跑几千人甚至上万同时在线应用程序呢? 挑选性能更好web服务器 单台 Apache web se…

数论考试题(b) 求约数的约数的最大个数

题意&#xff1a;求1~n范围里约数的约数的个数加起来最多的是哪个数 及其总数 题解&#xff1a; /* 对一个数质因数分解 首先要知道两个公式&#xff1a;约数的个数的公式&#xff0c;和约数的约数的个数的公式(详见题解) 然后发现&#xff1a;质因数分解后 小的次冥尽量大 会…

Anaconda 安装

参考网址&#xff1a;http://www.jianshu.com/p/169403f7e40c http://blog.csdn.net/qq_26898461/article/details/51488326 Anaconda基础 什么是Anaconda Anaconda是一个用于科学计算的Python发行版&#xff0c;支持 Linux, Mac, Windows系统&#xff0c;提供了包管理与环境管…

mybatis学习(15):mybatis连接mysql数据库

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(String id); }BlogMapper.xml <?xml version"1.0" encoding"UTF-8" ?>…

nodejs对mongodb数据库的增删改查操作(转载)

首先要确保mongodb的正确安装&#xff0c;安装参照&#xff1a;http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian-or-ubuntu-linux 另外可以参考我的另一篇博文 http://www.cnblogs.com/sexintercourse/p/5774310.html 指导mongo和nodejs的开发 然后下载nod…

mybatis学习(16):不使用接口的方式

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Inteage id); }BlogMapper.xml <?xml version"1.0" encoding"UTF-8" ?>…

AS3图像抖动效果源码。

DemoSourceWebsite转载于:https://www.cnblogs.com/xxcainiao/archive/2008/05/07/1186805.html

mybatis学习(17):列名与属性名不一致的情况(使用别名)

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Inteage id); }BlogMapper.xml <?xml version"1.0" encoding"UTF-8" ?>…

mybatis学习(18):列名与属性名不一致的情况(使用ResultMap)

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer id);Blog selectBlog2(Integer id); }BlogMapper.xml <?xml version"1.0" en…

MVCToolKit中HtmlHelper.ActionLink的BUG?

分页时<%if (ViewData.Accounts.IsPreviousPage) { %><%Html.ActionLink<SpeakOutFreely.Controllers.ManageController>(c >c.List(ViewData.Accounts.PageIndex -1), "Previous")%><%} %><%if (ViewData.Accounts.IsNextPage) { %&g…

PyChram简单使用教程

一、PyChram下载 官网&#xff1a;http://www.jetbrains.com/pycharm Windows:http://www.jetbrains.com/pycharm/download/#sectionwindows Linux:http://www.jetbrains.com/pycharm/download/#sectionlinux Mac:http://www.jetbrains.com/pycharm/download/# 二、PyChram简单…

mybatis学习(19):模糊查询#

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer id);Blog selectBlog2(Integer id);List<Blog> selectBlogByTi…

mybatis学习(20):模糊查询$

目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer id);Blog selectBlog2(Integer id);List<Blog> selectBlogByTi…

mybatis学习(21):MySQL 字符串 转换 CAST与CONVERT 函数的用法

MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值&#xff0c;并产生另一个类型的值。两者具体的语法如下&#xff1a; Sql代码 CAST(value as type); CONVERT(value, type); 就是CAST(xxx AS 类型), CONVERT(xxx,类型)。 Sql代码 mysql> SELECT CAST(3.35 …

【转载】快速、可伸缩和流式的AJAX代理--跨域持续内容分发

原文&#xff1a;《Fast, Scalable, Streaming AJAX Proxy - continuously deliver data from across domains》 作者&#xff1a;Omar Al ZabirURL&#xff1a; http://www.codeproject.com/KB/ajax/ajaxproxy.aspx Download source - 16.1 KB Introduction Due to browsers p…

pycharm常用设置(keymap设置及eclipse常用快捷键总结)

2015-04-15 13:23 23800人阅读 评论(0) 收藏 举报分类&#xff1a;openstack-环境及安装配置&#xff08;10&#xff09; 版权声明&#xff1a;欢迎大家转载&#xff0c;转载请注明出处blog.csdn.net/tantexian。 设置pycharm为Eclipse快捷键后使用总结&#xff1a; Ctrl O 根…

mybatis学习(22):查询排序

按照某列排序 目录结构 com.geyao.mybatis.mapper BlogMapper类 package com.geyao.mybatis.mapper;import java.util.List;import com.geyao.mybatis.pojo.Blog;public interface BlogMapper {Blog selectBlog(Integer id);Blog selectBlog2(Integer id);List<Blog> …