Express路由中可选的GET参数

下列:

app.get('/foo/start/:start/end/:end', blah.someFunc); 

火柴

 /foo/start/1/end/4 

但我希望它也匹配一个可选参数

 /foo/start/1/end/4/optional/7 

我试过这个:

 app.get('/foo/start/:start/end/:end(/optional/:value)?', blah.someFunc); 

但是它不符合上述两个例子中的任何一个。 我想这是因为我正在试图给它一个RegExp当它期待别的东西?

谢谢。

你为什么不添加另一条规则,就像这样

 app.get('/foo/start/:start/end/:end/optional/:value', blah.someFunc); app.get('/foo/start/:start/end/:end', blah.someFunc); 

它将在没有可选值的之前使用。

如果你只想使用一条线,试试这个:

 app.get('/foo/start/:start/end/:end/optional?', blah.someFunc) 

看一个例子的文档 。

如果您使用Express 4.x那么我认为最好使用数组格式的路由。 例如我有路线/service ,它提供所有服务列表和相同的路线时使用ID /service/id/:id提供单一的服务与ID参数。

 app.get(['/service', '/service/id/:id'], function(req, res) {}); 

你也可以在路由中使用正则expression式。 也许是这样的:

 app.get(/^\/foo\/start\/:start\/end\/:end(\/optional\/:value)?/, function (req, res, next) { 

在这个例子中,如果url是/ hello或者/ hello / world,它就可以工作。 这个? 使参数成为可选项(expression式4)。

 // app.js var index = require('/routes/index'); app.use('/hello', index); // routes/index.js router.get('hello/:name?', function(req, res){ var name = req.params.name; var data = { name: name }; res.json(data); });