首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Express.js路由:可选的splat参数?

Express.js路由:可选的splat参数?
EN

Stack Overflow用户
提问于 2012-04-05 06:21:50
回答 7查看 77.3K关注 0票数 85

我有一个看起来像这样的路由:

代码语言:javascript
复制
app.all('/path/:namedParam/*splat?',function(req,res,next){
  if(!req.params.length){
    // do something when there is no splat
  } else {
    // do something with splat
  }
});

但是,这不起作用-如果我调用path/foo/bar,它会命中路由,但如果我调用path/foo,它就不会。

有没有可能有一个可选的splat参数,或者我必须使用正则表达式来检测它?

编辑

更清楚地说,以下是我试图实现的要求:

  • 第一个和第二个参数是静态的,第二个是命名参数。
  • 可以附加任意数量的可选附加参数,但仍然会命中路由。
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-04-10 05:13:15

这适用于/path和/path/foo在Express4上,注意?之前的*

代码语言:javascript
复制
router.get('/path/:id*?', function(req, res, next) {
    res.render('page', { title: req.params.id });
});
票数 113
EN

Stack Overflow用户

发布于 2013-01-23 21:42:02

我只是遇到了同样的问题,并解决了它。这是我使用的:

代码语言:javascript
复制
 app.get('path/:required/:optional*?', ...)

这应该适用于path/meowpath/meow/voofpath/meow/voof/moo/etc...

似乎通过删除?*之间的/,最后一个/也变成了可选的,而:optional?仍然是可选的。

票数 76
EN

Stack Overflow用户

发布于 2012-04-05 06:30:52

这能达到你想要的效果吗?

代码语言:javascript
复制
app.all('/path/:namedParam/:optionalParam?',function(req,res,next){
  if(!req.params.optionalParam){
    // do something when there is no optionalParam
  } else {
    // do something with optionalParam
  }
});

更多关于快递路线的信息,如果你还没有看过的话:http://expressjs.com/guide/routing.html

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10020099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档