我有一条看起来像这样的路线:
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
}
});
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用 - 如果我打电话给path/foo/bar它击中路线,但如果我打电话path/foo,它不会.
是否可以使用可选的splat参数,或者我是否必须使用正则表达式来检测它?
编辑:
为了更清楚,这是我想要实现的要求:
Chr*_*ris 97
这适用于快递4上的/ path和/ path/foo,请注意*之前的内容?.
router.get('/path/:id*?', function(req, res, next) {
res.render('page', { title: req.params.id });
});
Run Code Online (Sandbox Code Playgroud)
And*_*ren 69
我只是遇到了同样的问题并解决了它.这是我用过的:
app.get('path/:required/:optional?*', ...)
Run Code Online (Sandbox Code Playgroud)
这应该工作path/meow,path/meow/voof,path/meow/voof/moo/etc...
似乎通过删除/介于?和之间*,最后/变为可选,同时:optional?保持可选.
Dav*_*ard 14
这会做你想要的吗?
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
}
});
Run Code Online (Sandbox Code Playgroud)
有关Express'路由的更多信息,如果您还没有看过:http://expressjs.com/guide/routing.html
假设你有这个网址:/api/readFile/c:/a/a.txt
如果你想req.params.path成为c::
'/api/readFile/:path*
Run Code Online (Sandbox Code Playgroud)
如果你想req.params.path成为c:/a/a.txt:
'/api/readFile/:path([^/]*)'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64936 次 |
| 最近记录: |