Serverless 開發(fā)實(shí)戰(zhàn)之 Todo 案例
前面將云函數(shù)與 Express 進(jìn)行整合后,接下來(lái)我們通過案例的方式繼續(xù)學(xué)習(xí)云函數(shù)的使用開發(fā)。這里我們選擇實(shí)現(xiàn)一個(gè) TodoList 案例的后端 API 接口,這個(gè)案例具備最基礎(chǔ)的增刪改查等基礎(chǔ)功能。
添加業(yè)務(wù)路由
首先,我們將上面的代碼進(jìn)行修改,將 TodoList 的業(yè)務(wù)處理分發(fā)到不同的路由請(qǐng)求。
代碼實(shí)現(xiàn)之后,在本地請(qǐng)求 / 根路徑和 todo 路徑,測(cè)試完成后,部署云函數(shù),然后再進(jìn)行對(duì)應(yīng)的測(cè)試。
基礎(chǔ)的業(yè)務(wù)路由配置好之后,我們回到業(yè)務(wù)代碼的編寫中,在 TodoList 案例中,我先來(lái)實(shí)現(xiàn)增刪改查的相關(guān)操作。
使用 postman 進(jìn)行本地及云函數(shù)的測(cè)試。
根據(jù)我們 Todo 的業(yè)務(wù)邏輯,肯定是先需要往里面添加數(shù)據(jù)的,有了數(shù)據(jù),才能進(jìn)行后面的增刪改。問題在于我們添加的數(shù)據(jù)存放在什么地方?當(dāng)然是存數(shù)據(jù)庫(kù)了,巧了,cloudbase 提供了云數(shù)據(jù)庫(kù),我們直接用就行了,那么具體怎么用呢?
云數(shù)據(jù)連接
在使用云數(shù)據(jù)庫(kù)之前,我們需要先理清楚它的一些基本概念。騰訊云給我們提供的云數(shù)據(jù)庫(kù)是一種文檔型數(shù)據(jù)庫(kù),提供基礎(chǔ)讀寫、聚合搜索、數(shù)據(jù)庫(kù)事務(wù)、實(shí)時(shí)推送等功能。數(shù)據(jù)庫(kù)中有數(shù)據(jù)庫(kù)實(shí)例、集合、記錄這三個(gè)基本概念,每個(gè)云開發(fā)環(huán)境下有且只有一個(gè)數(shù)據(jù)庫(kù)實(shí)例。數(shù)據(jù)庫(kù)實(shí)例中,可以創(chuàng)建多個(gè)集合,你可以將集合理解為一個(gè)文本文件,每個(gè)文件中可以存放多個(gè)類似 JSON 格式的對(duì)象,這樣的對(duì)象就被稱為記錄。

那么如何使用呢?我們打開官方手冊(cè)看一下:https://docs.cloudbase.net/database/introduce.html
需要注意的是,我們需要下載安裝 node-sdk, npm install cloudbase/node-sdk,通過服務(wù)端調(diào)用時(shí),需要在 SDK 初始化參數(shù)中,填入騰訊云密鑰(SecretID 和 SecretKey),手冊(cè)上并沒有說(shuō),但是一定注意,除了騰訊云密鑰還需要 env,也就是云環(huán)境 ID。
配置好基本信息之后,我們就可以連接數(shù)據(jù)庫(kù),執(zhí)行對(duì)應(yīng)操作了。但是,數(shù)據(jù)庫(kù)的操作以集合為單位的,所以,在操作之前需要先創(chuàng)建集合,用 db.collection 獲取集合引用后,再執(zhí)行對(duì)應(yīng)操作就可以了。
最后,我們將數(shù)據(jù)庫(kù)的連接進(jìn)行封裝,創(chuàng)建 config/db.js。
封裝好之后,我們只需要在 todo.js 中,引入 db 文件即可。
增刪改查操作
數(shù)據(jù)庫(kù)設(shè)計(jì)
字段名 | 值類型 | 長(zhǎng)度 | 備注 |
userid | unmber | 11 | 用戶ID |
title | string | 50 | 任務(wù)標(biāo)題 |
describe | string | 200 | 任務(wù)描述 |
createtime | string | 12 | 任務(wù)創(chuàng)建時(shí)間 |
remindtime | string | 12 | 任務(wù)提醒時(shí)間 |
done | Boole | 1 | 是否以完成 |
files | string | 50 | 任務(wù)附件 |
添加任務(wù)
獲取任務(wù)
修改任務(wù)
刪除任務(wù)
客戶端接口調(diào)用
這里我們選擇使用普通的 Vue 框架作為客戶端,按照傳統(tǒng)的方式創(chuàng)建,安裝好 Element-ui 及 Axios 請(qǐng)求庫(kù),就可以直接向云函數(shù)發(fā)送請(qǐng)求獲取數(shù)據(jù)了。
我這里簡(jiǎn)單地寫了一個(gè)請(qǐng)求的示例,發(fā)送請(qǐng)求后,渲染到頁(yè)面中,后續(xù)的工作也很簡(jiǎn)單,就是實(shí)現(xiàn)其他的接口功能就行了。一切看起來(lái)都是那么美好,但問題就在于它竟然能正常顯示,你就沒有那么一絲絲的不安嗎?當(dāng)我查看完云服務(wù)器的響應(yīng)頭之后,我才放心下來(lái),你知道發(fā)生什么了嗎?
沒錯(cuò)就是因?yàn)?/span>跨域了,一開始我以為頁(yè)面是不可能拿到的數(shù)據(jù)的,但是,我看到了下面的響應(yīng)頭,還是有些意外的。

這只是一個(gè)小插曲,我相信你也能看明白,我這里就不細(xì)說(shuō)了,但是代碼,我卻不想繼續(xù)寫了,因?yàn)椋@樣的開發(fā)方式,非常不 Serverless。
推薦閱讀:
騰訊云 Serverless 實(shí)戰(zhàn)演練
愚人節(jié)笑話:Serverless 就是無(wú)服務(wù)
后端架構(gòu)的演進(jìn)之路:Serverless 的誕生
點(diǎn)個(gè)“在看”和“贊”吧,
畢竟我是要成為前端網(wǎng)紅的人。
