【表達】老爸的私房錢-專案介紹

當作面試的情節回答吧!

Ching-Yi Lin
Jan 14, 2022

你為何會選擇這個專案?

後端最常接觸的就是路由與資料庫的設定,而老爸私房錢專案貼近於一般生活的應用,能夠在 router 操作過程中,大量地與資料庫溝通深化 CRUD 的概念。

你使用了什麼技術?

為了更快速地架設伺服器,我採用了 Express.js 將繁瑣的 request 和 response 過程變得更模組化。

為了提升全端開發資料流取得,我採取 Handlebars 套件來協助我在建構前端頁面的過程中,更容易取得後端資料來渲染。

為了讓前端畫面更快速成形,我使用 Boostrap 框架來輔助頁面樣式渲染,需要客製化樣式時,則自訂 CSS 來完成。

為了讓資料庫操作更快上手,我使用 MongoDB,能夠以 javascript 語法來存取資料。

最後基於安全性考量,使用了 passport 套件來實作登入機制,以及 bcryptjs 套件來實作加密流程。

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

對於路由設計以及 handlebar 應用比較能掌握,對於 boostrap 查找以及資料庫模糊查詢就比較難切入,花了比較多時間摸索。

過程中碰到什麼困難?又如何克服?(例如:查找網路文件)

原先在製作關鍵字查詢時,有用到 mongoose 提供的語法 $regex 模糊設定能夠應用,後續在篩選資料庫資料日期時卻顯示不能夠使用 $regex,因此到 stack overflow 找到 $gte 和 $lte 比較大小於的方式去篩選出條件日期,能夠成功應用。

但是程式碼比較不俐落,後續又回想是否能夠克服 $regex 使用的問題,發現有文章提到,之所以不能夠使用 $regex 是因為那是特定的格式,沒辦法模糊查找,因此只要將 date 格式改為 String 即可以解決。

Type 為 Date 時,資料庫資料呈現

Type 為 String 時,資料庫資料呈現

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

嘗試自製 handlebar helper ,讓 handlebar 解析成 html 的過程更具邏輯性,操作了條件式判斷,以及迴圈應用,也在過程中碰到了重大問題,在使用自製的條件式 helper 時,如果內部又使用了 #each helper 則會無法正常運作 #each 迭代出參數。當下並沒有馬上解決這個問題,而是改用了其他方案替代,經歷了一段時間回顧,茅塞頓開呀!

當時一直覺得是helper寫錯了,現在我們來看看解決過程吧!

helpers : ifCond 寫法

錯誤取用父層變數

原先做法,判斷 yearSelected 是否為空值,else 表示 yearSelected 有值,才會輸出 allMonths,過程較為繁瑣。但是一直抓不出 allMonths 的月份值。

正確取用父層變數

現在突然想通了!是 path 父層的緣故!allMonths 前面加入 ../ path 以及 <option> 內 monthSelected 也加入 ../ 就解決了。

當時的解決方案,也是目前最佳方案

當時並不知道是父層錯誤的原因,且剛好想出了另一個解決方式,也是目前最佳方案。

其實根本不需要判斷 年份 有沒有選擇,因為專案 router ‘/’ 中就已經針對年份處理過 getAllMonths 月份清單了,直接輸出即可。

年份沒選擇時,allMonths 會是空值,那也不會有任何選項出現。

結論

學習的當下總會有些盲點,應時刻保持心情平穩,視線放遠,回過頭來就會發現答案就在不遠處。

--

--

Ching-Yi Lin

正在從積木程式教育老師轉型為工程師的路途上。