## 緣由 我曾經嘗試了很多的記帳方式,目前為止最常使用的記帳 App 是 [Moneybook](https://moneybook.com.tw/)。它會直接安全地串接自己的網路銀行,把交易紀錄和餘額直接在 App 上顯示出來。 在這個 App 上,我可以看到他們把分類、交易金額、明細等全部都做出來,而且還使用折線圖等方式將各項分類的支出及收入總額全部弄出來。 因此我在想,我是不是可以擷取他們 App 中的一些關鍵功能,試看看能不能寫出來。所以,我先從支出下手,設定一些常見的分類,請使用者輸入日期、明細及金額,然後網站就能自動計算出各分類的支出總額及所有總花費。 經過一個禮拜多的撰寫,就是[目前所看到的樣子](https://pure-ridge-74177-a37619d894e3.herokuapp.com/)。 ## 使用技術 這個網站所使用到的技術如下 ([原始碼在這裡](https://github.com/Taiwania/expense-tracker)): 1. **主架構**:採用 Node.js,Express 兩大技術來構建網站的路由、後端處理及傳遞資料給前端渲染。 2. **Mongoose, MongoDB**:收入支出及使用者登入資訊使用 NoSQL 資料庫 MongoDB 進行儲存,並使用 Mongoose 進行資料的查詢及擷取。 3. **Dotenv**:由於本網站設計成可以在本地及 Heroku 上進行,為了能夠在本地進行開發除錯,以及不影響 Heroku 的部署功能,我這裡採用 Dotenv 來判定專案所處環境是不是本地,以利進行本地的作業。 4. **Express-handlebars**:做為前端的網站渲染。 5. **Express-session, Passport, Bcryptjs, Passport-local**:在使用者登入驗證機制方面,採用 Passport 架構中的 Passport-local 本地驗證策略,密碼使用 Bcryptjs 進行 Salt 加密,並採用 Express-session 在瀏覽器儲存使用者的登入資訊。 6. **Connect-flash, Express-validator**:在登入、註冊使用者資訊及編輯、新增支出紀錄時,用來驗證是否已完整填寫資料及驗證格式是否正確,並跳出錯誤訊息提醒使用者注意。 ## 碰到的問題及解決方式 在撰寫本專案時,碰到了許多問題,以下僅簡單提出我覺得有所成長的地方: 1. 支出紀錄格式驗證的問題:在初次進行部署後,有使用者反應在沒有輸入日期的情形下會卡住並終止運作。由於當時的驗證機制只有採用 Connect-flash,必須使用大量的邏輯判斷才能完成錯誤判斷及輸出警告訊息,因此在後續的修正當中引入了 Express-validator,簡化判斷機制,在資料傳入路由前就直接進行資料判斷及產生錯誤訊息,並將錯誤訊息直接傳入路由完成錯誤訊息輸出的步驟。這個 Express-validator 是在查閱資料及詢問問題後才知道有這個 patch,也藉由學習如何使用這個 patch,讓之後的資料驗證及訊息錯誤處理更上一層樓。 2. 在處理分類及種子資料匯入資料庫的過程中,發現使用者及支出紀錄的種子資料已經匯入,但分類的種子資料沒有匯入,這才發現分類種子資料的匯入遇到了同步及非同步問題。原本想要採用 Promise.all(Model.create()) 的處理方式進行,但卻遇到 Model.create() 不是迭代函式而無法使用 Promise.all() 進行非同步處理。最後在查閱資料後才發現 Model.insertMany() 可以解決問題,而且也才學到 Model.insertMany() 可以將多分資料文檔直接丟進資料庫,而 Model.create() 必須一筆筆丟進去。這個部分能讓我學到其他丟資料進資料庫的方法,也能讓我以後在處理輸入資料時,可以隨需求及狀況來使用不同的函數來進行處理。 ## 結語 經過這此的專案設計及實作流程,對於如何將我想要的功能進行後端路由設計、資料庫模型建構及前後端資料串接等功能有一些初步的實作經驗,也能讓我有信心可以在往後的實作當中擷取這次專案所學到的東西,作出更符合需求的產品。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up