我使用Express来处理格式为/articles/:year/:month/:day
的路线,其中年,月和日是可选的。
我的问题是,如何让它们成为可选项?根据我已定义的当前路线,除非存在所有三个参数,否则它将无法解析并将落入默认路线。
答案 0 :(得分:47)
路由提及的expressjs's guide:
Express使用
path-to-regexp
来匹配路径路径;看到了 path-to-regexp文档,用于定义所有可能性 路线路径。 Express Route Tester是一个用于测试基本功能的便捷工具 快速路线,虽然它不支持模式匹配。
基本上,您可以使用 public class MyController : Controller
{
private readonly IOptions<IdentityOptions> _identityOptions;
public MyContoller(IOptions<IdentityOptions> identityOptions)
{
_identityOptions=identityOptions?.Value ?? new IdentityOptions();
}
public MyAction()
{
var length=_identityOptions.Value.Password.RequiredLength;
}
}
字符使参数可选。
?
答案 1 :(得分:20)
为了在一个答案中拥有3个不同选项的目的而编辑。感谢@ hjpotter92的正则表达式答案。
使用网址参数
使用正则表达式
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;
}
此端点的网址如下所示:
http://localhost/articles?year=2016&month=1&day=19
答案 2 :(得分:0)
由于传递的参数中有下划线,因此这种类型的路线不太可能使用。
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);
}