我正在使用 Express 处理格式为 /articles/:year/:month/:day
的路线,其中年、月和日是可选的。
- 如果三个参数都没有给出,则返回所有文章;
- 如果指定年份,则退回当年的物品;
- 如果给出年份和月份,则返回该年份和月份的物品;
- 如果三个参数都给出,则返回该年、月、日的文章。
我的问题是,我如何使它们成为可选的?使用我定义的当前路由,除非所有三个参数都存在,否则将无法解析并会落入默认路由。
原文由 CLDev 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在使用 Express 处理格式为 /articles/:year/:month/:day
的路线,其中年、月和日是可选的。
我的问题是,我如何使它们成为可选的?使用我定义的当前路由,除非所有三个参数都存在,否则将无法解析并会落入默认路由。
原文由 CLDev 发布,翻译遵循 CC BY-SA 4.0 许可协议
出于自己的目的进行编辑,以便在一个答案中包含 3 个不同的选项。感谢@hjpotter92 的正则表达式答案。
使用 URL 参数
使用正则表达式
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
原文由 R. Gulbrandsen 发布,翻译遵循 CC BY-SA 4.0 许可协议
5 回答4.8k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
5 回答1.9k 阅读
2 回答1.3k 阅读✓ 已解决
3 回答2k 阅读
1 回答3.2k 阅读
expressjs 的路由指南 提到:
基本上,您可以使用
?
字符使参数可选。