iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
0
Software Development

今晚我想來點 Express 佐 MVC 分層架構系列 第 5

[今晚我想來點 Express 佐 MVC 分層架構] DAY 05 - Express 基本結構與路由

Express 基本結構

import express from 'express';
const app = express();

上方的範例程式碼定義 app 是 Express 的實例,在這個層級我們稱為 應用程式層(Application-level) ,而 Express 的應用是由一系列 中介軟體(Middleware) 所構成,其定義為:可以存取 請求(req)回應(res) 以及呼叫下一個中介軟體的 函式(Function) ,要呼叫下一個中介軟體就要使用 next()

應用程式層定義基本路由

可以透過 app 提供的 方法(Methods) 來指定要用什麼方式載入路由,比如說:使用 GET 方式載入路由。下方為基本的路由結構,其中,大寫的部分為指定參數:

app.METHOD(PATH, HANDLER)
  • METHOD:為載入路由的方式,如:GET、POST、PUT、PATCH、DELETE 等
  • PATH:為資源的路徑,即要設定的路由位置
  • HANDLER:為載入路由後要執行的操作,即 中介軟體函數 ,可以是 一個或多個 function

https://ithelp.ithome.com.tw/upload/images/20200809/20119338iWJAWiRB4W.png

路由器層定義基本路由

不過只透過應用程式層定義路由十分難維護,所以通常會使用 Express 中的 Router 來集合相同路徑下的路由,並將其分割成其他檔案, 就像一個小的應用程式層 ,這個層級稱為 路由器層(Router-level) 。我們將測試的路由拆至路由器層,所以新增 app.routing.js

├── src
|   ├── index.ts
|   ├── app
|   |   └── app.routing.ts
|   └── environments
|       ├── development.env
|       └── production.env
├── package.json
└── tsconfig.json

接著撰寫一下 app.routing.ts 的內容:

import express from 'express';
const router = express.Router();

router.get('/test', (req, res, next) => {
    res.send('test!');
});

export default router;

更改一下 index.ts 的內容:

import express from 'express';
import path from 'path';
import dotenv from 'dotenv';

import appRoute from './app/app.routing';

const app = express();

dotenv.config({ path: path.resolve(__dirname, `./environments/${ process.env.NODE_ENV }.env`) });

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

app.use('/', appRoute);

app.listen(process.env.PORT, () => console.log(`http server is running at port ${ process.env.PORT }.`));

在瀏覽器中輸入 http://localhost:3000/test ,會呈現下方結果:
https://ithelp.ithome.com.tw/upload/images/20200809/20119338rLS1KWtWq6.png

從上方範例可以看出,定義完路由器層的路由配置後,需要在應用程式層透過 use 方法來載入 Router 的實例,進而使用該路由的配置,是十分方便的功能。

等等,所以 use 是幹嘛用的?
簡單來說 use 是用來載入中介軟體的方法,與 getpost 等方法一樣,透過指定路徑,使它在特定路徑下才會觸發,是經常使用的功能,與其他方法不同的是它並不會受請求資源的方式所限制。

小結

今天的內容主要是讓大家對 Express 的路由運作模式有基本的概念,並了解到中介軟體於 Express 中扮演何種角色,也不難看出 Express 的路由機制可以建立成樹狀結構,由許多 Router 組合起來,最終收斂於應用程式層。
https://ithelp.ithome.com.tw/upload/images/20200809/20119338IvImpfI065.png

下一篇會帶大家了解在 Express 中扮演很重要角色的 body-parser,沒有它,Express 就不完整了!究竟有多重要呢?敬請期待!


上一篇
[今晚我想來點 Express 佐 MVC 分層架構] DAY 04 - 建置專案
下一篇
[今晚我想來點 Express 佐 MVC 分層架構] DAY 06 - Express 與 body-parser
系列文
今晚我想來點 Express 佐 MVC 分層架構30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
阿暟
iT邦新手 5 級 ‧ 2022-07-12 14:57:33

想提醒你一下,介紹指定參數的那張照片上
箭頭函式那邊少了大括號{}

HAO iT邦研究生 3 級 ‧ 2022-07-12 19:48:59 檢舉

你好,箭頭函式不寫 {} 直接寫其他邏輯是可以的,它的意義是把表示式進行回傳,如果用很嚴格的角度來說,圖片中這樣寫是沒那麼理想沒錯,但我是為了讓該行程式碼可以只佔一行所以這樣寫,謝謝提醒/images/emoticon/emoticon41.gif

我要留言

立即登入留言