当前位置:  开发笔记 > 编程语言 > 正文

Express中的多个可选路由参数?

如何解决《Express中的多个可选路由参数?》经验,为你挑选了2个好方法。

我正在使用Express来处理格式为的路线/articles/:year/:month/:day,其中年,月和日是可选的.

如果没有给出三个参数,则所有文章都将被退回;

如果给予年份,则返回当年的文章;

如果给出年份和月份,则返回该年份和月份的文章;

如果给出所有三个参数,将返回该年,月和日的文章.

我的问题是,如何让它们成为可选项?根据我定义的当前路线,除非存在所有三个参数,否则它将无法解析并将落入默认路线.



1> hjpotter92..:

该expressjs指南到路由提到:

Express path-to-regexp用于匹配路径路径; 有关定义路径路径的所有可能性,请参阅path-to-regexp文档.Express Route Tester是一个用于测试基本Express路线的便捷工具,尽管它不支持模式匹配.

基本上,您可以使用该?字符使参数可选.

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



2> R. Gulbrands..:

编辑的目的是在一个答案中有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

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有