如何使参数化的Express路线有或没有尾部反斜杠?

我有一个非常简单的应用程序,将始终使用以下URL结构进行访问: www.myapplication.com/some/deep/nested/1234567890/

1234567890是用户的帐号,每个用户可能不同。 目前,如果最后一个反斜杠停止,则无法访问应用程序: www.myapplication.com/some/deep/nested/1234567890

实际上,如果通过以下方式访问应用程序,url将发生变化: www.myapplication.com/1234567890

鉴于以下在我的app.js中:

 app.use('/', api); app.use('/:user', express.static(path.join(__dirname, 'dist'))); 

在哪里api是一个简单的快速路由器本身,我的React应用使用jQuery使用req.params中的用户号码调用,我怎样才能让应用程序访问使用后面的反斜杠或不?

我已经尝试了各种方法,如:

 app.use('/:user/?', express.static(path.join(__dirname, 'dist'))); 

要么

 app.use(express.static(path.join(__dirname, 'dist'))); 

后者阻止url被截断,但只能在没有用户帐号的情况下工作,这显然是必要的: www.myapplication.com/some/deep/nested/

如果我访问www.myapplication.com/some/deep/nested/1234567890www.myapplication.com/some/deep/nested/1234567890/

URL不被截断,但我得到Cannot GET /1234567890Cannot GET /1234567890/

我也试过洗牌,无济于事:

 app.use('/:user', express.static(path.join(__dirname, 'dist'))); app.use('/', api); 

我使用快速斜杠 。 这是一个简单的中间件,当它不存在时附加一个斜线。 那么你只需要处理包含尾部斜线的路线。 这可能是可取的,因为www.myapplication.com/some/deep/nested/1234567890www.myapplication.com/some/deep/nested/1234567890/是不同的path,并且为两者提供相同的响应并不理想(在SEO的条款,最有针对性的)。

那么,我想出了一个hacky,work-around的方式来做到这一点,是非常特定于我的情况,并不会在大多数情况下工作。 我会在这里发表,以便其他人可以改善答案。 我添加了以下中间件:

 app.use('/', api); app.use(function(req, res, next) { if(req.url.substr(-1) !== '/' && req.url.length > 1 && req.url.substr(-3) !== 'css' && req.url.substr(-2) !== 'js'){ res.redirect(301, '/some/deep/nested' + req.url + '/'); }else{ next(); } }); app.use('/:user', express.static(path.join(__dirname, 'dist'))); 

if语句检查css和js文件,并防止反斜杠被添加到它们(在添加这些检查之前我看到的问题)。

再一次,这适用于我面对的具体情况,但我希望有更好的答案潜伏在那里。