最後修改日期|Aug 04, 2021
DowYuu言
我來掃一下這裡積了半年的灰塵了,咳咳。
最近空閒時在玩Express,寫個筆記紀錄紀錄。往後有遇到新狀況也會不定時來更新一下…吧(?)
安裝Express
1 |
|
查看Express版本
1 |
|
安裝Express生成工具
1 |
|
初始專案
Express
預設使用Jade
視圖引擎與純CSS,Jade
視圖引擎語法請參考連結。
1 |
|
如上面範例中所示,會在目前目錄下建立並產製一個叫my-project-la
的專案資料夾,後面可帶參數,參數請見express --help
或是查看生成器參數
初始專案後記得進入該專案資料夾中使用npm install
語法安裝該專案所有使用的套件。
1 |
|
啟動
1 |
|
開發階段好幫手:nodemon-讓伺服器在檔案更改時自動重新啟動
在開發階段,前端檔案在檔案更動後還可以立刻看到效果,但後端檔案更動必須要重啟整個伺服器才會刷新。
每當一個小小的修正就要不斷的重啟是很煩人的,裝了nodemon
之後它會自動偵測每當有檔案更改時會自動重啟伺服器,舒舒服服!!
1 |
|
安裝完nodemon
後,開啟package.json
並在scripts
區塊加上語法:
1 |
|
這邊示範取名devstart
,於是啟動伺服器的語法改為npm run devstart
:
1 |
|
用了nodemon啟動語法會發現,每當有檔案更動,就會有自動重啟的訊息跑出來呦!舒舒服服!!
1 |
|
引入Router
初始化後的Express
專案其實都有基本的範例,像是預設產出的Express
專案就有引入index
和users
這兩個Router
,這可以在app.js
中看到:
1 |
|
這表示當URL連結到/
(根目錄)時,會使用indexRouter
,當URL連結到/users
(e.g. 127.0.0.1/users)時,會使用usersRouter
。
對應的Router檔案預設是放在專案資料夾中的routes
資料夾,若要自己新增Router,就比照原先範例,在app.js
中將該routes引入(require
可省略副檔名.js
):
1 |
|
1 |
|
render(頁面渲染)
前面初始專案時有提到,Express
預設使用Jade
視圖引擎,你可以在views
資料夾中看到初始的範例.jade
檔案,且在app.js
中看到視圖引擎設置,預設還貼心的有註解說明:
1 |
|
因為如此,在Router
中使用res.render(<filename>, <params>)
,就會去views
資料夾中找到對應<filename>
檔案(不需要加附檔名.jade)解析成HTML
,顯示給你看:
1 |
|
至於為什麼會連同layout
一同渲染,是因為預設views/index.jade
中有寫到extends layout
,後面也有提到頁面渲染不使用layout要怎麼做。
render(頁面渲染)不使用layout
於該.jade
頁面中將extends layout
和block content
拿掉即可。
要記得預設的HTML
宣告是寫在layout.jade
中的,如果不要用記得要加上HTML
宣告。
1 |
|
頁面引入非存放在public中的檔案
預設Express
會將專案中的public
資料夾路徑引用入根目錄。
1 |
|
所以在views/layout.jade
中,的可見其<link>
可直接引用根目錄底下的/stylesheets
資料夾,就會自動連結至public
資料夾中,不須依照相對路徑在那邊../public
,也增加隱密性。
若要引用的檔案並非存放在public
資料夾中,也可使用app.use
引入設置路徑名稱與指定資料夾,像是要引用裝在node_modules
中的程式。
這邊用sweetalert2
(這是個美化alert
的好用套件)當範例,頁面要引用其js
和css
時即可使用/swal
,程式會自動對應到node_modules/sweetalert2/dist
資料夾:
1 |
|
1 |
|
Router取得傳入參數
取得參數 | 使用語法 | 範例 | 取得 | 備註 |
---|---|---|---|---|
網址 中帶的參數 |
req.params.<參數>參數> | app.get(‘/log/:date’, …) | req.params.date | |
$.ajax 中帶的data |
req.query. | $.ajax中的data:{ date: ‘2021.01.01’ } | req.query.date | |
form 中的輸入格 |
req.body.<該元件的name>該元件的name> | <input type="text" name="account" > |
req.body.account | 使用套件multer |
1 |
|
ajax 回傳
1 |
|
在javascript中帶入jade參數
1 |
|