網址組成
首先要介紹網址的組成,這裡選擇 Google 搜尋 express
當例子。
以下是範例網址,實際操作時網址可能很長一串,不過是可以簡化成這樣子的,其他多餘的都是 Google 的設定
https://www.google.com/search?q=exprss
https
: 傳輸協定,有兩種類型,對應的 port 也不同- http: port 80,有安全性問題
- htpps: port 443,代表安全傳輸協定,又稱
SSL
www
: 子網域,掛在主網域底下,也就是說一個主網域底下可能有多個子網域,並提供服務(ex: mail.google.com、drive.google.com)google.com
: 主網域,透過網域供應商購買search
: 路由 route?q=exprss
: 網址參數 query
Express Route
參考之前的範例,我們可以在根目錄 /
下新建一個 /user
的路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| const express = require('express'); const app = express();
app.get('/', function (req, res) { res.send('Hello Express'); }); app.get('/user', function (req, res) { res.send('測試'); });
const port = process.env.PORT || 3000; app.listen(port, function () { console.log('Example app listening on port 3000!'); });
|
如果要在 /user
底下在建一個路由呢 ? 只需在建一個 get()
並再 /user/欲加入的路由名稱
即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const express = require('express'); const app = express();
app.get('/', function (req, res) { res.send('Hello Express'); }); app.get('/user', function (req, res) { res.send('測試'); }); app.get('/user/test2', function (req, res) { res.send('測試2'); });
const port = process.env.PORT || 3000; app.listen(port, function () { console.log('Example app listening on port 3000!'); });
|
網址參數
如同前面 google 的搜尋參數 ?q=exprss
,如何在進入到 http://localhost:8080/user?search=express
這個網址時,後端 express 也能收到我的參數呢?
在 Express 中是使用了 req.query
來紀錄資料
註: query
中文應該是詢問的意思,不確定為什麼會被翻成參數
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| const express = require('express'); const app = express();
app.get('/', function (req, res) { res.send('Hello Express'); }); app.get('/user', function (req, res) { console.log(req.query); const query = req.query.search; res.send(`測試 ${query}`); });
const port = process.env.PORT || 3000; app.listen(port, function () { console.log('Example app listening on port 3000!'); });
|
這時進入到 http://localhost:8080/user?search=express
時,頁面就會有 測試 express
的字樣囉,並且在 CMD
or 終端機
會有 req.query
的物件。
如果參數有很多個的話,就在 ?search=express
後面加個 &
再繼續寫 ?search=express&name=Cloud
, 就可以囉。
網址路由
先前提到的路由都是預先設定好的,像是 /
、/user
等等,假設有一個路徑是 /user/Cloud
指定到個人頁面的話,該怎麼再 Express 設定呢?
Express 使用 req.params
來接收動態的路徑資料
參考以下範例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| const express = require('express'); const app = express();
app.get('/', function (req, res) { res.send('Hello Express'); }); app.get('/user/:name', function (req, res) { console.log(req.params); const name = req.params.name; res.send(`測試 ${name}`); });
const port = process.env.PORT || 3000; app.listen(port, function () { console.log('Example app listening on port 3000!'); });
|
總結
以下是本篇路徑所講的所有內容統整,可以執行 http://localhost:3000/user/Cloud/0905?limit=10&q=hello
來看觀察資料結構
範例程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| const express = require('express'); const app = express();
app.get('/', function (req, res) { res.send(` <html> <head></head> <body> <h1>Hello Express</h1> </body> </html> `); });
app.get('/user/:name/:date', function (req, res) { console.log(req.params); console.log(req.query); const myName = req.params.name; const date = req.params.date; const limit = req.query.limit; const q = req.query.q; res.send(` <html> <head></head> <body> <h1>我的名字:${ myName }</h1> <p>日期: ${ date }</p> <P>筆數: ${ limit }</P> <p>尋找關鍵字: ${ q }</p> </body> </html> `); });
const port = process.env.PORT || 3000; app.listen(port, function () { console.log('Example app listening on port 3000!'); });
|