技術筆記-以 nodejs 為後台,以 google sheet 充當資料庫

2023/12/24閱讀時間約 3 分鐘

安裝完成 nodejs 後選用一個工作目錄執行 npm init,npm 會產生一個 package.json 檔案,之後為此專案安裝套件時都會記錄在此,讓專案可以很容易的重建和移植,也可設定 npm start 執行時以哪一個 js 檔當作系統入口。直接開寫了,以下我用 app.js 當作系統入口。

raw-image

前兩行引進兩個外部套件,express 為處理 request 和解析 routes 等 web 應用程式基本且必要的功能,body-parser 則提供將 request 傳入的資料解析成物件的功能,兩者都要透過 npm install 安裝。


sheetRoutes 為自行設計開發的 routes,內容將記在後面,看這 require 的用法真的非常優美。app = express() 意即用 app 當作最外層的整個應用系統物件,app.use() 裡面的參數預設是帶有 (request, response, next) 為參數的函數,所有函數的定位均為 middleware 接受 request,做一些處理並將回應加在 response,再呼叫 next() 傳到下一手,所以 use 可以非常多層。


以上所示第一層將 request 內容轉成物件,第二層處理 CORS 讓此服務可以讓別的網站呼叫,第三層就是處理自訂的 routes,此 routes 是以 sheet 開頭,分別導到不同的軟體元件處理。


接下來是 sheetRoutes.js,它的功能主要是識別 browser 的 url,其中 sheet/*** 後面接的網址對應到個別的 controller 相對單純,處理邏輯主要寫在 controller,可觀察此處的 export 寫法,export 甚麼,require 接到的就是甚麼,讓整個系統很容易的跨檔案分工。

raw-image

再來是 controller,這兒乘載主要的邏輯,其中取得 google sheet 的邏輯再度切開到 sheetService 處理,document 的識別和認證放在這兒,必須在 google cloud platform 建立 service account,在預計存取的 google sheet 設定授權,並了解 document id and sheet id 等細節,網路已有許多人分享了就不再贅述。以下程式為經過摸索了解取回的 rows 物件,拆解其結構取出資料的可行方式。

raw-image


raw-image


先看最後傳回的 json 物件:每一個 row 物件經過 controller 的重組成為井井有條的 key vaue 形式,key 就是每一行的第一列。

raw-image

原始的 google sheet 資料如下,記住要把第一行 freeze,取資料時才可有 key 為依據;顯而易見資料已經完美的轉換形式傳輸出去了。

raw-image


最後看看在背後默默運行的 sheetService,其中引用了第三方貢獻的強大套件 google-spreasheet,我連 google 原始文件都沒 k 過,直接用套件真的是事半功倍。

raw-image


最後我想把專案 deploy 到雲端正式提供服務,不知道會不會像 python 一樣一堆版本衝來衝去,非常擔心!結果令人欣喜,azure 神奇的自動把 https 也搞定了,nodejs 既然這麼友善,我想日後應該會越用越多吧!


raw-image


By Newman Chen 2022/11/29

導覽頁:紐曼的技術筆記-索引 | Newman Home










11會員
75內容數
漫步,悠閒自在的隨意行走!是行為,是態度,更是一種境界,存在於得勝的王者。
留言0
查看全部
發表第一個留言支持創作者!