1. 程式人生 > >詩詞歌賦,樣樣精通!詩詞古語小程式帶你領略魅力古風丨實戰

詩詞歌賦,樣樣精通!詩詞古語小程式帶你領略魅力古風丨實戰

1. 小程式功能

  • 古詩詞大全
  • 成語大全
  • 成語接龍
  • 詩詞飛花令
  • 詩詞分享、收藏
  • 詩詞接龍
  • 唐詩宋詞起名字
  • 百家姓
  • 猜謎語

2. 小程式預覽:





3. 部分截圖

首頁

列表頁

詳情頁 分享頁

唐詩宋詞

成語接龍

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.data
let that = this

this.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.command

exports.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.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 = this

this.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 資料失敗

原因:請看文件: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相關的技術故事/技術實戰經驗想要跟大家分享,歡迎留言聯絡我們哦~比心!

相關推薦

詩詞歌賦樣樣精通詩詞古語程式領略魅力古風實戰

1. 小程式功能 古詩詞大全 成語大全 成語接龍 詩詞飛花令 詩詞分享、收藏 詩詞接龍 唐詩宋詞起名字 百家姓 猜謎語 2. 小程式預覽: 3. 部分截圖 首頁 列表頁 詳情頁 分享頁 唐詩宋詞 成語接龍 4. 專案結構 . ├── README.md ├── project.

都9102年了還不會Docker?10分鐘從入門操作到實戰上手

Docker簡述 Docker是一種OS虛擬化技術,是一個開源的應用容器引擎。它可以讓開發者將應用打包到一個可移植的容器中,並且該容器可以執行在幾乎所有linux系統中(Windows10目前也原生支援,Win10前需要內建虛擬機器),正所謂“一次打包,到處執行”。 Docker容器的執行是完全的沙箱機制,相

【我的Linux我做主】技術大牛告訴Linux網絡原理就該這麽學

TCP/IP Linux網絡基礎 Linux屬於網絡操作系統,所以網絡功能是Linux的重要核心功能。我們知道網絡模型包含總線型網絡、星型網絡、令牌環狀網絡等。數據在網絡上傳輸是以電磁信號進行傳輸的,例如在總線型網絡中,在同一時刻只能有一個信號在傳輸介質中傳送,如果有多個主機同時發送信息,那麽就會產生

校園創業零成本不妨做個免費的程式

校園創業,是許多學生想要嘗試但是又會擔心成本太高的一件事。但是事實上,除了花錢,還有一些零成本的推廣套路你並不知道!那麼請同學們聽好了,下面KUK酷可科技給大家講解為何創業會無成本? 利用微信小程式 案例展示:【校小貝】微信小程式 與其他商家不同,校小貝並不是一個提供單一服務的商

微信二次開發案例python製作微信支付程式

  由於最近自己在做小程式的支付,就在這裡簡單介紹一下講一下用python做小程式支付這個流程。當然在進行開發之前還是建議讀一下具體的流程,清楚支付的過程。 1.支付互動流程   當然具體的引數配置可以參考官方文件 https://p

Python網路爬蟲入門領略Python爬蟲的樂趣

前段時間小編寫了一篇有關於Python入門的文章,我覺得寫的還是不夠好,所以我特地補上一篇Python爬蟲的入門的,本文特別適合Python小白,剛學習爬蟲不久。接下來就讓我們一起來寫第一個例子吧!

看這一篇就夠啦微信程式入門與實戰橫掃常用元件API開發技巧(完整版包含全部原始碼)

第1章:什麼是微信小程式? 1 開篇及課程特色介紹 2 直觀感受一下微信小程式 3 小程式適合做什麼樣的應用 4 對開發者的影響 5 學習基礎 6 小作業 第2章:小程式環境大件與開發工具介紹 1 開篇介紹及下載工具 2 小程式目前情況及限制 3 小程式開發

如何利用Aspose.Words將格式應用於表行和單元格?示例演示全面瞭解

Aspose.Words For .Net是一種高階Word文件處理API,用於執行各種文件管理和操作任務。API支援生成,修改,

深入淺出阿里P7架構師分析ArrayList集合原始碼建議是先收藏再看

# ArrayList簡介 ArrayList 是 Java 集合框架中比較常用的資料結構了。ArrayList是可以**動態增長和縮減的索引序列**,內部封裝了一個**動態再分配的Object[]陣列** ![](https://upload-images.jianshu.io/upload_image

重新定義數據庫的時刻阿裏雲數據庫專家了解POLARDB

架構摘要:POLARDB是阿裏雲ApsaraDB數據庫團隊研發的基於雲計算架構的下一代關系型數據庫,其最大的特色是計算節點與存儲節點分離,借助優秀的RDMA網絡以及最新的塊存儲技術。POLARDB不但滿足了公有雲計算環境下用戶業務快速彈性擴展的剛性需求,同時也滿足了互聯網環境下用戶對數據庫服務器高可用的需求。

多多客程式(doodoo)釋出 1.0基於 node vue 開發的微信程式系統

doodoo 多多小程式開源版 API介面檔案 server 環境需求node >= 8.0 mysql 配置檔案 .env # 應用配置 APP_PORT=3001 APP_HOST=http://127.0.0.1:3001 # 驗證碼 VERIFY_MAXIP=36 /

現在還沒清楚程式可以瞭解下如何利用程式把握商機

現在還沒清楚小程式的,可以瞭解下如何利用小程式把握商機 一、小程式的起源和概念 a、小程式的起源和概念 小程式就是小型的手機App,直接在微信內運作,而不用經過傳統的應用商店。這一功能在 2017年1月正式推出,微信努力與其他已有的服務類公眾號中作區分,小程式起初的發展卻非常緩慢。但

為什麼要學習C++它到底能做什麼?揭祕~

C++是由貝爾實驗室的Bjarne Strou-strup在C的基礎上推出的,它進一步擴充和完善了C語言,既可以進行C語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的面向物件的程式設計。下面就讓我們一起來領略C++之美吧. (小編推薦

微信生成引數的二維碼合成海報掃碼後推送程式

背景:公司開發的小程式要實現將產品免費給使用者試用的功能,使用者登入小程式後在產品頁可以將產品以二維碼海報的方式分享給微信好友,好友掃碼後跳轉公眾號,關注後公眾號推送小程式,點選小程式後跳轉到小程式中的相應產品頁面。 如下圖: 這裡涉及到兩個重要的環節: 1.生成帶

RhaPHP v1.5.8 釋出微信公眾號、程式開發 PHP 框架

   RhaPHP微信平臺管理系統,支援多公眾號管理,小程式開發,APP介面開發,平臺獨立且快速簡潔易用。靈活的擴充套件應用機制,具有容易上手,幾乎融合微信介面,簡單的呼叫對二次開發與開發擴充套件應用模組大大提高開發效率,降低企業商家運營成本。擴充套件應用模組化,機制靈活,程

微酋長領略程式大事記年史

微信小程式大事記編年史 12月21日:微信小程式開放新增功能:分享,自定義模板訊息,客服訊息,掃一掃; 12月30日:微信開放帶引數二維碼,允許已上線的小程式製作進入任意頁面的二維碼; 1月9日:微信開放微信小程式; 1月22日:微信增加社交分類,允許提交社交類

11歲女孩螞蟻金服CEO直邀您的孩子該學程式設計了阿里最程式

9月19日,在剛剛結束的雲棲大會(原阿里雲開發者大會)的最後一天,一位小牛人驚豔登場,她就是隻有11歲小學生萬海妍。11歲的年齡就有開掛般的人生,不僅能參加雲棲大會中的支付寶程式設計大賽,還成功的挺進了冠軍總決賽,一個僅11歲的小學生竟然擁有如此成績,而她本人也才學程式設

多多客開源版微信開放平臺的程式SaaS 系統基於doodoo.jsvue.js

多多客作為青否原班人馬打造的小程式第三方平臺,結合5年商城系統、近2年小程式SaaS平臺研發及運營經驗,將重點發力小程式個性化和各類營銷玩法,聯合服務商、開發者、經營專家,共建服務生態,服務百萬商家。 多多(doodoo)小程式開源版 多多客免費開源的小程式SaaS系統,koa.js + v

【開源】Westore Cloud 釋出- 沒後端沒SQL沒DBA只需 javascript 開發雲端程式

Westore Cloud - 隱形雲,NoBackEnd,NoSql,HiddenDB 好的設計便是感覺不到設計的存在 開發小程式,但是:沒有後端!沒有運維!沒有 DBA!沒有域名!沒有證書!沒有錢!沒有精力! 沒關係,會 javascript 就可以,Westore Cloud 帶你起飛~~ Gith

海賊王、火影和死神三大經典動漫用Python做詞雲視覺化分析

這篇文章,要帶你們去一個神奇的國度,一個可以在二維生活的神奇國度。你準備好了嗎? 對於動漫愛好者來說,海賊王、火影、死神三大動漫神作你肯定肯定不陌生了。 小編身邊很多的同事仍然深愛著這些經典神作,可見“中毒”至深。今天小編利用Python大法帶大家分析一下這些神作,看看這些神作到底在講些神馬