今天要針對Routes和Middleware的部份進一步了解Express框架。
Routing(路由)在網頁應用程式中是指網址路徑與應用程式端點的比對(match),以及應用程式接收用戶端請求的方法,在Express裡的路由方法就是前一天提過的衍生自HTTP方法的get()
、post()
等,而Routes指的是網址路徑,即URL中的Path。在Express框架中,Route除了可以是字串,也可以是正規表示式,亦即可以依據需求規劃應用於多個端點的路由方法比對,例如:當Route比對為/a?bcd
,路由方法會針對Path是/acd
或/abcd
的端點回應,除此之外Route的設定也可以加入變數,這是今天的實作部份。
用用看不同的Routes
get()
的路由方法,Route分別是/
和/api
。app.get('/', (req, res)=>{
res.send("<html><head></head><body><h1>Hello</h1></body></html>");
});
app.get("/api", (req, res)=>{
res.json({firstName: "chw", lastName: "k"});
});
/job
的get()
路由方法,回傳一個HTML頁面。app.get("/job", (req, res)=>{
res.send("<html><head></head><body></body></html>");
});
/:<變數名稱>
加入Route,然後可以透過req.params.<變數名稱>
取得請求時附加的變數。app.get("/job/:type", (req, res)=>{
res.send(`<html><head></head><body><h1>Job: ${req.params.type}</h1></body></html>`);
});
/job/<變數內容>
可以改變顯示頁面內容。Middleware又稱為中介層,在Express中可以解釋為在請求與回應的事件中間執行的部份,一個應用程式中可能有多個中介層同時存在,中介層可以用來處理許多不同的事件,今天以載入CSS檔案作為說明。
body {
font-family: "Hack", Helvetica, sans-serif;
}
express.static()
中介層,紀錄靜態檔案存放位置,並以use()
方法指定到一個路徑/assets
。app.use("/assets", express.static(`${__dirname}/public`));
/assets
路徑加入public資料夾中的CSS檔案。app.get('/', (req, res)=>{
res.send("<html><head><link href=assets/style.css type=text/css rel=stylesheet /></head><body><h1>Hello</h1></body></html>");
});
補充一下
程式碼中載入CSS檔案的概念,是由回應頁面中的<link/>
物件,透過href
向/assets
路徑提出請求載入style.css
檔案,而use()
再透過對應的路徑透過express.static()
中介層尋找並讀取style.css
檔案。
如果從瀏覽器的開發人員工具會發現Network裡有兩個請求:localhost與style.css,style.css的請求路徑就是/assets/style.css
。
路徑的設定、參數的加入以及中介層的使用讓HTTP的請求與回應可以有更多的變化,特別是中介層,除了載入靜態檔案之外,use()
方法透過不同的回呼函式也能有不同的應用,而在Express中常常用到的get()
、post()
等路由方法,因為是在處理請求與回應之間的動作,其實也歸類為中介層,感覺學了一些基礎發現要學的東西更多了
https://expressjs.com/en/guide/routing.html
Learn and Understand NodeJS [課程]