[英]Optional GET parameter in Express route
下列:
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
一起使用时,它提供所有服务列表和相同的路由/service/id/:id
id在param中提供具有id的单个服务。
app.get(['/service', '/service/id/:id'], function(req, res) {});
在这个例子中,如果url是/ hello或/ hello / world,它就可以工作。 的? 使参数成为可选参数(表示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);
});
您还可以在路径中使用正则表达式。 也许是这样的:
app.get(/^\/foo\/start\/:start\/end\/:end(\/optional\/:value)?/, function (req, res, next) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.