最後修改日期|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 | |