Express — RestfulApi起手教學2

陳冠億 Kenny
企鵝也懂程式設計

--

上次我們介紹如何利用Express快速建立了web server,這次要來介紹開發Express好用的一些工具。

介紹nodemon

nodemon套件能夠自動化的重啟Node.js所創立的application。意思就是,每次我們修改程式碼的時候,我們總要重新run程式,才會有我們想要看到的結果。而nodemon套件正是能夠幫我們自動化的重啟程式,不須手動去做重啟的動作,這樣可以幫助我們提升開發效率。對於Web專案,這種工具是很常見的,在各大語言的Web框架皆有類似的工具。

安裝nodemon

在我們node-rest-shop專案底下,開啟terminal輸入以下指令:

npm install --save-dev nodemon

— save-dev的意思代表此套件只存在開發階段,有些時候一些好用的工具套件我們只需在開發階段使用即可,未來將專案deploy到開發環境的時候,並不需要此套件。

使用nodemon

在package.json中裡面有個參數是script,這代表我們可以在裡面輸入一些指令,例如開啟專案入口點。以我們現在專案為例,我們新增以下指令:

"start": "nodemon app.js"

利用nodemon去執行app.js,就能達到自動重啟功能!要啟用這項指令,我們可以在terminal輸入以下指令:

npm run start

就能開啟我們的專案入口點,app.js。

看到以上訊息,就代表我們成功使用nodemon去啟動我們的專案,而只要我們有任何修改程式碼的動作,只要有進行存檔,nodemon就會立刻讓專案重啟,而不需讓我們手動去重啟。

介紹dotenv

dotenv套件,能夠幫助我們自動load環境變數,而不用我們在程式碼裡面去用程式控制環境變數。通常web專案裡面會定義到的環境變數不外乎是port、database url等等。只要是一些固定的值,而這些值又會在專案裡面不同程式檔案中用到,又或者是這些值是相對私密的,不允許公開在code裡面。dotenv套件就是透過讀取.env檔案,來load環境變數,因此我們只要創建.env檔案在裡面定義這些環境變數的值,並在程式碼中載入dotenv套件,它就能幫我們自動載入這些環境變數供程式使用。

安裝dotenv

在我們node-rest-shop專案下,開啟terminal輸入以下指令:

npm install dotenv

使用dotenv

首先在專案下,創建.env檔案,該檔案裡面可以定義環境變數,其定義格式為NAME=VALUE,因為目前專案還太小,但port可以當作環境變數,因為在開發專案的時候要是port要更換,我們還要去code裡面尋找port變數定義在哪裡太麻煩了。因此將port環境變數定義為3000:

PORT=3000

通常像這種環境變數的名稱,慣例上會以全大寫來命名,多個單字的話就用底線來連接。

接著我們在app.js最上面加入以下code:

require('dotenv').config()

config函數裡面可放option參數,其中option裡面可以放置custom的環境變數檔案路徑。若沒添加,則預設讀取專案根目錄的.env檔案。當執行以上code,就會自動將環境變數assign給process.env。也就是當我們在程式碼裡面想要讀取環境變數PORT的值,我們只需要這樣讀取:

const port = process.env.PORT

port之值就會對應到.env檔案所定義的值。

總結

今天我們加入了nodemon及dotenv兩個實用套件,app.js內容更改如下:

require('dotenv').config();
const express = require('express');
const app = express();
const port = process.env.PORT;

app.get('/', function (req, res, next) {
res.send('Hello World');
});

app.listen(port, function () {
console.log('Express app started on ' + port);
});

package.json如下:

{
"name": "node-rest-shop",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon app.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"dotenv": "^8.0.0",
"express": "^4.17.1"
},
"devDependencies": {
"nodemon": "^1.19.1"
}
}

.env

PORT=3000

詳細內容可參考Github Source Code:https://github.com/KennyChenFight/node-rest-shop/tree/section2

歡迎來我個人部落格參觀: https://kennychen-blog.herokuapp.com/

--

--