【實作練習】簡易記帳本

前言

使用 Express 製作簡易記帳本的紀錄。

為何會選擇這個專案?

近期在學習用 Express 進行開發,陸陸續續接觸到了不同的知識,包含 CRUD 、登入/登出功能、資料庫…等技術。如果要將這些階段性學習的知識進行融會貫通,找一個專案實作會是一個不錯的方法。藉由實踐來驗證自己是否已掌握這些技術知識,並且有能力將他們成功運用在未來開發的專案裡。簡易記帳本是個經典的實作專案,上述提到的內容也都可以一併在這個專案進行實踐。

使用了什麼技術?

  1. Express 框架搭配 express-handlebars 樣板引擎搭建簡易網路應用程式。
    使用 Express 建立後端伺服器、用 express-handlebars 為各個頁面建立樣板,之後只需要將資料隨著 HTTP request 傳入,就可以將資料快速的帶入模板中。因為樣板的重複利用,除了可以減少開發時間,也可以讓各個頁面看起來更統一、更有一致性。
  2. 使用 Mongoose 連線 Mongodb 管理、操作資料庫。
    這個專案需要紀錄的重要資料有「使用者資訊」、「支出紀錄」,使用資料庫管理是個比較安全也比較有效率的方式。利用「資料連結」的設置,可以確保使用者只能看見屬於自己的資訊,也可以利用資料庫的 Schema 設計進行後端再次驗證,確保使用者提供的資料符合要求規格。
  3. 採用 RESTful 路由設計。
    RESTful 路由設計是「合作開發」常見的路由設計方式,採用統一的設計規則可以讓不同開發者直接依循規則進行開發,避免各自風格不同造成的衝突問題。另外,直觀的 HTTP request method 也讓人對資源進行什麼樣的操作一目瞭然。
  4. 運用 passport.js 進行身分驗證。
    HTTP 有無狀態 (stateless) 的限制,每個 HTTP request 都被單獨對待,也就是它不會主動儲存狀態資訊。使用 passport.js 可以將使用者的登入狀態進行保存,達到對使用者操作權限的管理目的。
  5. 利用 bcrypt.js 對使用者密碼進行加密保護。
    如果沒有使用雜湊來對使用者資料進行加密,使用者私密資料將會被直接儲存進資料庫裡。此時只要擁有資料庫的操作權限,就有極大可能可以直接獲取使用者私密資料(例如:密碼)。私密資料的外洩會侵害到使用者權益,因此加密保護是必要的措施。
  6. 部署到 Heroku。

哪部分相對能掌握?哪裡花了最多時間?

Express server 搭建到 CRUD 功能開發及路由設計相對熟悉,之前開發過的 Todo-List 和餐廳清單都有使用到同樣技術,因此幾乎能完全掌握。

之前只有用過 Promise.then() 的寫法來處理非同步語法,過程中總是覺得「包得太多層」讓資料傳遞跟執行順序較難一目了然。這次專案嘗試改用 async/await 方式來處理非同步語法,花了多一點時間熟悉。

過程中碰到什麼困難?又如何克服?

最大的困難其實就是「萬事起頭難」。包含專案功能的開發路徑、順序、時間管理…等,一開始其實毫無頭緒,要做的事情很多,不知道從哪裡開始比較好。後來我參考了之前專案的 commit message ,先大致把要做的事情進行排序、切分,變成一個個更小的任務。後來依照規劃按部就班,成功的將需求功能一一完成。

過程中有對哪個技術有特別深刻的學習?

其實上述並不是遇到的全部問題,這個專案也大量練習了「找出問題、解決問題」的方法。開發過程中閱讀錯誤訊息、下對關鍵字、成功 Debug 的不斷循環加深了我對於開發工具的理解。

另外,比較印象深刻的是 failureFlashfailureMessage 的使用。在查資料的過程中看到這篇的使用說明部落格。我從這篇文章學到了除了 README 以外,也可以從閱讀套件原始程式碼的方式來了解工具的使用方法,之後也成功的將原本寫的 code 更加精簡!

文章內容如有錯誤,歡迎留言討論!


本 Blog 上的所有文章除特别聲明外,均採用 CC BY-SA 4.0 協議 ,轉載請註明出處!