專案介紹
這次做的專案名稱為荷包君的日常,本質是個記帳網站,具有使用者驗證功能,讓使用者紀錄、修改支出,並可以透過類別和月份進行篩選。
Github連結在此
開發後的反思
- 你為何會選擇這個專案?
主要是想要讓自己熟悉資料庫的操作及JS同步和非同步的特性,這個專案除了基本的CRUD功能外,還有加上篩選的功能,讓使用者能針對支出的種類跟月份篩選,這是兩種不同型別的資料,在資料庫操作上也有點不同,讓我得以針對不同型別的資料進行篩選。
- 你使用了什麼技術?
登入機制使用客戶端的cookie和伺服器端的express-session來實作,主要考量是因為將狀態資訊都放在伺服器端會較安全,減少request和瀏覽器的負擔,且目前專案屬於小型,使用者不多,故不會佔據太多伺服器的記憶體。
驗證機制使用Passport,主要原因有兩點,第一點是模組化,它提供多種驗證策略(Strategy)選擇,將不同策略封裝成模組,使用者只要根據專案需求下載所需的程式碼即可,除了能節省記憶體空間,也能達到關注點分離。未來若要新增其他第三方程式的登入策略都不用大量改寫程式碼,可以達成我快速開發的需求。第二點是靈活度,Passport是middleware,這也代表使用者可以根據需求在特定路由加入驗證,方便除錯。
- 哪部分你相對能掌握?過程中碰到什麼困難?又如何克服?
CRUD的功能因為之前練習過很多次,算是相對好掌握,資料的查找基本上都是以字串為主,只要將查找條件放入find()或findOne()即可。
我花比較多時間在月份的篩選上面,前端傳送過來的資料是字串,但我後端存的資料型態是Date,因為過去操作資料庫我都是用字串做篩選,因此一開始我的想法是把Date用toJSON轉為字串後再跟前端送來的資料做比對,但這樣得把所有資料庫的Date都抓出來轉為字串,耗費效能。於是我又上網搜尋資料庫對Date的操作,找到mongo query的語法,運用$gte, $lt就能成功篩選出月份,比上一個方法更簡潔快速,於是最終我的寫法改成先將前端資料型別轉成Date,再用mongo query跟後端比對。
- 過程中你有對哪個技術有特別深刻的學習?
Mongo query,我去看了mongo文件以及其他人如何應用到專案,query選取器種類很多,像是比較($gte, $eq)、邏輯($and, $or),還有$regex能做字串比對,也可以搭配$option進一步設定比對條件,我也把mongo query應用在我之前的專案上,將其中關鍵字查找的功能進行優化,使程式碼更直覺簡潔。
以上就是這次開發的心得,若針對文章有任何心得或建議,歡迎留言交流!