快递,如何让路由处理空参数?

Express, how to make a route handle empty parameter?

如何指定一个参数可以为空的路由?

例如/:one?/:two? 处理 /1/2,但不处理 //2,我如何制定一条路线来捕获这两个 uris?

app.get(/\/(.*)\/(.*)/, function(req, res) {
    var one = req.params[0];
    var two = req.params[1];
});
/a/b => {0:'a', 1:'b'}
/a/  => {0:'a', 1:'' }
//b  => {0:'' , 1:'b'}
//   => {0:'' , 1:'' }

很久没问这个问题了,但我遇到了同样的问题,并找到了使用命名参数的不同解决方案:

app.get('/:one(.{0,})/:two(.{0,})', (req, res) => {
  const one = req.params.one;
  const two = req.params.two;
});

括号内有命名参数的正则表达式规范。注意 Express 文档中的注释:

In Express 4.x, the * character in regular expressions is not interpreted in the usual way. As a workaround, use {0,} instead of *. This will likely be fixed in Express 5.