快递,如何让路由处理空参数?
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.
如何指定一个参数可以为空的路由?
例如/: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.