本項目是一個基於雲開發的小程序。javascript
本文選取項目中的一個頁面 -- 歷史上的今天 來作一個雲開發的分享,會涉及雲函數和雲數據庫。php
因爲是實戰項目,關於小程序的基礎知識請移步官方文檔,本文再也不贅述。java
口袋工具y
本項目選擇第二種方式,並最終選擇了聚合數據平臺API。
關於AppID: 請自行修改成你註冊的小程序AppID。
目錄結構:node
+-- cloudfunctions|[指定的環境] // 存放雲函數的目錄 +-- miniprogram // 小程序代碼編寫目錄 |-- README.md // 項目描述文件 |-- project.config.json // 項目配置文件
雲開發
在目錄cloudfunctions
上右鍵
新建雲函數,填入新建雲函數的名稱(如todayInHistory)
回車或失去焦點即會自動建立並上傳。
雲函數目前執行環境僅支持node,因此須要使用js來編寫雲函數的邏輯。
在控制檯中進入該雲函數的目錄,執行ios
npm i -S axios
本項目使用axios來執行請求的發送,可使用其餘如request-promise等等的庫來替換
config.js
文件,添加代碼以下:exports.key = YOUR_JUHE_KEY // 在聚合數據平臺申請的key exports.baseUrl = 'http://v.juhe.cn/todayOnhistory/queryEvent.php'
// 雲函數入口文件 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 } = event const resp = await axios.get(baseUrl, { params: { key, date: `${month}/${day}` } }).then(res => { return res.data }) return resp.result }
在開發小程序的過程當中,新建一個頁面是很常見的操做,有兩個很是方便的方式:git
app.json
文件中,在pages項添加咱們須要的頁面路徑,直接保存便可。如:"pages": [ "pages/today-in-history/index" ]
pages
目錄下新建目錄 today-in-history
,在新建的目錄上 右鍵
-> 新建page
, 填入名稱如index
, 回車便可完成頁面下四個文件的建立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>
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) } })
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; }
到這裏咱們完成了 歷史上的今天
的列表頁,效果以下:github
項目中使用 wantweapp 的部分組件數據庫
# npm npm i vant-weapp -S --production # yarn yarn add vant-weapp --production
點擊開發者工具菜單項 工具
-> 構建npm
程序將自動構建已安裝的依賴npm
"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" }
添加下面的代碼json
<view class="full-width"> <van-popup show="{{ show }}" position="bottom"> <van-datetime-picker type="date" value="{{ currentDate }}" bind:cancel="onCancel" bind:confirm="onConfirm" /> </van-popup> </view> <van-toast id="van-toast" />
import Toast from '../../miniprogram_npm/vant-weapp/toast/toast';
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: 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) }
代碼實現:
cloudfunctions/todayInHistory/index.js
// ... 省略其餘無需改動的代碼 exports.main = async(event, context) => { const { month, day } = event const 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/TencentClo...
若是你有關於使用雲開發CloudBase相關的技術故事/技術實戰經驗想要跟你們分享,歡迎留言聯繫咱們哦~比心!