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); });