今天要针对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 [课程]
>>: Day 27:DB也是假的 建立Mock SQLDelight
前言 大家好,我是Lufor,第一次参加铁人赛。这是我的主要Blog网址: https://lufo...
call, apply, bind 方法 当我们对函式使用 call, apply, bind 这三...
以实务来说,总是会有一些情况导致使用者没办法正常收到认证码,所以系统必须具备 retry on fa...
前言 此篇虽然不是非常专业,但基本文字设定应该是没什麽问题啦 再谈谈设定文字之前要先知道文字有哪几种...
之後会将铁人赛里的系列文做一个介绍 不过分类是依照我的想法 Google Assistant Goo...