簡體   English   中英

Express中的多個可選路由參數?

[英]Multiple optional route parameters in Express?

我使用Express來處理格式為/articles/:year/:month/:day的路線,其中年,月和日是可選的。

  • 如果沒有給出三個參數,則所有文章都將被退回;
  • 如果給予年份,則返回當年的文章;
  • 如果給出年份和月份,則返回該年份和月份的文章;
  • 如果給出所有三個參數,將返回該年,月和日的文章。

我的問題是,如何讓它們成為可選項? 根據我定義的當前路線,除非存在所有三個參數,否則它將無法解析並將落入默認路線。

expressjs的路由指南提到:

Express使用path-to-regexp來匹配路徑路徑; 有關定義路徑路徑的所有可能性,請參閱path-to-regexp文檔。 Express Route Tester是一個用於測試基本Express路線的便捷工具,盡管它不支持模式匹配。

基本上,你可以使用? 使參數可選的字符。

/articles/:year?/:month?/:day?

編輯的目的是在一個答案中有3個不同的選項。 感謝@ hjpotter92的正則表達式答案。

使用URL Params

用正則表達式

app.get('/articles/:year?/:month?/:day?', function(req, res) {
  var year = req.params.year; //either a value or undefined
  var month = req.params.month;
  var day = req.params.day;
}

沒有正則表達式

var getArticles = function(year, month, day) { ... }

app.get('/articles/:year', function(req, res) {
  getArticles(req.params.year);
}
app.get('/articles/:year/:month', function(req, res) {
  getArticles(req.params.year, req.params.month);
}
app.get('/articles/:year/:month/:day', function(req, res) {
  getArticles(req.params.year, req.params.month, req.params.day);
}

定義要支持的3個路徑並重用相同的功能

使用查詢參數

app.get('/articles', function(req, res) {
  var year = req.query.year; //either a value or undefined
  var month = req.query.month;
  var day = req.query.day;
}

此端點的URL將如下所示:

http://localhost/articles?year=2016&month=1&day=19

由於傳遞的參數中包含下划線,因此這種類型的路徑不太可能有效。

app.get('/products/:product_Id/buyers/:buyer_Id', function(req, res) {
  getArticles(req.params.product_Id, req.params.buyer_Id);
}

所以如果路線不起作用,我建議您使用以下路線系統。 在那里,您將能夠發送多個參數。

app.get('/products/:productId/buyers/:buyerId', function(req, res) {
  getArticles(req.params.productId, req.params.buyerId);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM