[英]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.