iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0
自我挑戰組

從零開始的後端異世界生活系列 第 29

Day 29 - 使用 Config 為 NestJS 專案拆分不同開發環境

前言

終於來到了第 29 天了,也就是名義上技術篇章的最後一篇了 XDD,到了今天我還真是突然不知道要寫什麼,而且部署 AWS 那邊因為卡關還沒有時間繼續研究,所以只能到處看看有沒有好東西可以學來寫,那今天就來寫拆分 NestJS 開發環境。

拆分開發環境

為什麼要拆分開發環境呢?其實當初一開始變成工程師的時候還沒有想過這件事,以前練習寫 Side Project 刻 UI 的時候,因為只有自己一個人,而且也不是什麼非常重要的東西,所以不會去考慮這件事。

進了公司以後才發現,一個產品在上線之前,是要經過層層測試把關的,你才能真的把這個新的版本給更新到架上。

尤其對後端來說,拆分開不同的環境更是重要,畢竟你寫好的 API 直接打下去如果是連到正式資料庫的話,改動到了什麼資料可真是不好說啊,如果你是使用者,突然發現你的帳號裡多了奇奇怪怪的東西總是會滿頭問號吧(?)

安裝 Package

這邊我們跟著 Udemy 課程的 Configuration 篇章進行,當然要拆分不同環境還有很多種方式,可以再自己搜尋看看。

這裡我們安裝 config 這個 Package:

yarn add config

https://ithelp.ithome.com.tw/upload/images/20201014/20119619ebgLQnJ4Kp.png

撰寫 default.yml

我們在這個階層建立一個資料夾叫做 config,並且新建一個檔案叫 default.yml
https://ithelp.ithome.com.tw/upload/images/20201014/20119619G6UTINsJky.png

既然是 default 的話,中文叫做預設,也就是不會因為不同開發環境而變動的一些設定,比方說 port、DB 的基礎設定:
https://ithelp.ithome.com.tw/upload/images/20201014/201196196dzUrufMf6.png

不過由於這是寫在程式碼裡面的,有些比較機敏的資訊是不推薦寫在程式碼裡,例如:DB 的連線資訊及帳密等等。

撰寫 development.yml

再來我們來撰寫測試環境用的 yml,這邊僅僅是做範例而已,而我們在測試環境也會吃到剛剛 default 所撰寫的:
https://ithelp.ithome.com.tw/upload/images/20201014/20119619DyDqqcHDVf.png

撰寫 production.yml

再來我們來撰寫正式環境用的 yml,不過由於正式資料庫的機敏程度較高,通常不會撰寫在程式碼,會透過環境變數去設定帳密等等資訊,所以這邊我突然也不知道要寫啥 XDD,先留空吧:
https://ithelp.ithome.com.tw/upload/images/20201014/20119619Jkr2890yfO.png

套用 Config 設定

我們來到 main.ts,先將 config 給引用進來:
https://ithelp.ithome.com.tw/upload/images/20201014/20119619KeWqSpl9rF.png

要取用剛剛撰寫的 yml 檔裡的參數的話,例如我要取到 port,我要先拿到 server:
https://ithelp.ithome.com.tw/upload/images/20201014/20119619LVNh7Co5v9.png

平常我們都是聽 3000 port,我去把 default 改成 3001,並且讓它聽,且印出來看看:
https://ithelp.ithome.com.tw/upload/images/20201014/20119619GHKCttm8iS.png

然後運行 server,耶,聽到 3001 了:
https://ithelp.ithome.com.tw/upload/images/20201014/20119619aWDk0BoBBR.png

使用環境變數

如上面一直強調的,有些機敏資訊是不能寫在程式碼裡的,這邊我依然用 port 來做範例,如果有給環境變數就聽環境變數,沒有就聽 Config 的:
https://ithelp.ithome.com.tw/upload/images/20201014/20119619BL1ao6UBr9.png

那我們來測試一下,給它這個變數是 3005 好了:
https://ithelp.ithome.com.tw/upload/images/20201014/20119619CAJGzsjn7i.png

yes,順利聽到 3005 了:
https://ithelp.ithome.com.tw/upload/images/20201014/20119619baUnuaO2bP.png

以上是最簡易版的做法,官方有提供更詳盡的做法,再自行參考囉。

/*
本系列文係個人新手開發心得,可能會有許多錯誤,煩請多多包容不吝指教。
*/


上一篇
Day 28 - 不想再寫 if 啦,來研究 NestJS 的 Pipe 看看
下一篇
Day 30 - 人生 Online 好難玩,技能到底要怎麼點才能最強呢?
系列文
從零開始的後端異世界生活30

尚未有邦友留言

立即登入留言