為何會選擇記帳程式做專案?
網路上有很多各種記帳方式,用Excel方式來記帳是很多人熟悉的作法。但既然我已經學習了JavaScript這個程式語言,就想試看看如何藉由程式語言寫出一個簡易的記帳程式。
技術選擇方面
選擇Node.js是因為他是一個可以讓JavaScript 執行環境;我可以直接在電腦上建立、讀取、修改和刪除檔案,也能和資料庫連通。Node.js的優點在於能及時處理大量數據,基於記帳程式牽扯到大量資料庫的操作,所以我選擇Node.js。
哪部分你相對能掌握?哪裡花了最多時間?
整個專案中最能掌握的部份應該算是建立專案的剛開始。從新增專案資料夾開始、如何設定package.json、安裝 Express、設定主程式 app.js、設定常用腳本、到最後的版本控制設定,這些都是建立專案最基本也最重要的架構。
關於建立種子資料其實是花我最多的時間。因為建立種子資料腳本是專案剛開始最重要的步驟,在完成伺服器和資料庫連線之後,必須依靠指令來執行這個腳本才能看到我們想呈現的資料。當專案進行到後期加入使用者登入、登出的認證系統之後,因為原本的資料結構被大幅度的修改舊有的腳本已經作廢,需要重構種子資料。因為對於非同步處理的觀念和用法還不是很熟,只好上網查找資料也順便觀摩其他人的是如何寫的。
過程中你有對哪個技術有特別深刻的學習?
整個專案過程中對於使用bcrypt的雜湊演算來為密碼做保護的處理流程有深刻的學習。
bcrypt的運作原理是這樣的:
1. 在使用者設定的密碼中,加上一段隨機產生的字串也就是實務上所說的「加鹽」,時期成為一個組合字串。
2. 加鹽後的組合字串透過雜湊演算法,產生一段被處理過的密碼hashed password。
3. 把產生結果的hashed password和中途加入的鹽 salt 分開儲存。當登入者輸入的密碼經過同樣的處理所產出的字串,和資料庫中的hashed password一樣時,應用程式會判別登入成功;反之,不一樣時就會判別登入失敗。
第一次完成全端作品雖然碰上許多大小不一的問題,很慶幸透過不斷上網找資料和觀摩他人的作品,最終問題都能一一解決。未來除了持續學習新的東西,也要好好複習舊的技能讓自己對於做一個專案更加順利。