ExpressJS - URL構建



我們現在可以定義路由了,但是這些路由是靜態的或固定的。要使用動態路由,我們應該提供不同型別的路由。使用動態路由允許我們傳遞引數並基於這些引數進行處理。

這是一個動態路由的示例:

var express = require('express');
var app = express();

app.get('/:id', function(req, res){
   res.send('The id you specified is ' + req.params.id);
});
app.listen(3000);

要測試這個,請訪問 **https://:3000/123**。將顯示以下響應。

URL Building 1

您可以將 URL 中的“123”替換為任何其他內容,並且更改將反映在響應中。上面一個更復雜的例子是:

var express = require('express');
var app = express();

app.get('/things/:name/:id', function(req, res) {
   res.send('id: ' + req.params.id + ' and name: ' + req.params.name);
});
app.listen(3000);

要測試上述程式碼,請訪問 **https://:3000/things/tutorialspoint/12345**。

URL Building 2

您可以使用`**req.params**`物件訪問您在 url 中傳遞的所有引數。請注意,以上兩個是不同的路徑。它們永遠不會重疊。如果您想在獲得“/things”時執行程式碼,則需要單獨定義它。

模式匹配路由

您還可以使用**正則表示式 (regex)** 來限制 URL 引數匹配。假設您需要`id`是一個 5 位長的數字。您可以使用以下路由定義:

var express = require('express');
var app = express();

app.get('/things/:id([0-9]{5})', function(req, res){
   res.send('id: ' + req.params.id);
});

app.listen(3000);

請注意,這**只**會匹配具有 5 位長`id`的請求。您可以使用更復雜的正則表示式來匹配/驗證您的路由。如果您的任何路由都不匹配請求,您將收到`**"Cannot GET "**`訊息作為響應。可以使用這個簡單的路由將此訊息替換為 404 未找到頁面:

var express = require('express');
var app = express();

//Other routes here
app.get('*', function(req, res){
   res.send('Sorry, this is an invalid URL.');
});
app.listen(3000);

**重要** - 這應該放在所有路由之後,因為 Express 從`**index.js**`檔案的開頭匹配到結尾的路由,包括您需要的外部路由器。

例如,如果我們定義與上述相同的路由,在使用有效的 URL 請求時,將顯示以下輸出:

Correct regex

而對於不正確的 URL 請求,將顯示以下輸出:

Invalid regex(404)
廣告