Javascript 如何使参数化快速路线在有或没有尾随反斜杠的情况下工作?

Javascript 如何使参数化快速路线在有或没有尾随反斜杠的情况下工作?,javascript,node.js,express,url-routing,Javascript,Node.js,Express,Url Routing,我有一个非常简单的应用程序,可以通过以下URL结构访问:www.myapplication.com/some/deep/nested/1234567890/ 其中,1234567890是用户的帐号,每个用户的帐号可能不同。当前,如果最后一个尾随反斜杠被删除,则无法访问应用程序:www.myapplication.com/some/deep/nested/1234567890 事实上,如果应用程序以这种方式访问:www.myapplication.com/1234567890 在my app.js

我有一个非常简单的应用程序,可以通过以下URL结构访问:
www.myapplication.com/some/deep/nested/1234567890/

其中,1234567890是用户的帐号,每个用户的帐号可能不同。当前,如果最后一个尾随反斜杠被删除,则无法访问应用程序:
www.myapplication.com/some/deep/nested/1234567890

事实上,如果应用程序以这种方式访问:
www.myapplication.com/1234567890

在my app.js中给出以下内容:

app.use('/', api);
app.use('/:user', express.static(path.join(__dirname, 'dist')));
如果api本身是一个简单的express路由器,我的React应用程序使用jQuery调用它,jQuery使用req.params中的用户号,那么我如何使用尾随的反斜杠或非尾随的反斜杠使应用程序可访问

我尝试过各种方法,例如:

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

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

如果我进入
www.myapplication.com/some/deep/nested/1234567890
www.myapplication.com/some/deep/nested/1234567890/

url未被截断,但我获取
无法获取/1234567890
无法获取/1234567890/

我也尝试过洗牌,但没有效果:

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

我用这个。它是一个简单的中间件,在不存在时附加一个尾随斜杠。然后,您只需要处理包含尾部斜线的路由。这可以说是更好的选择,因为
www.myapplication.com/some/deep/nested/1234567890
www.myapplication.com/some/deep/nested/1234567890/
是不同的路径,对两者做出相同的响应并不理想(在搜索引擎优化方面,最有针对性)。

好吧,我想出了一个难题,解决这个问题的方法非常适合我的情况,在大多数情况下都不起作用。我会把它贴在这里,这样其他人可以改进答案。我添加了以下中间件:

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文件,并防止向它们添加反斜杠(在添加这些检查之前,我看到了一个问题)


同样,这适用于我面临的特定情况,但我希望有更好的答案存在。

您是否尝试过app.use('/:user*',express.static(path.join(u dirname,'dist'))?刚试过,当我去掉尾随的反斜杠时,它会截断url。当我使用尾随的反斜杠访问路由时,它会获取静态文件,但显示一个303(请参见其他),然后尝试转到截断的url并获取它们:www.myapplication.com/1234567890/main.js/等/some/deep/nested/route是静态的,还是动态的?您可以尝试使用app.use('/some/deep/nested/route*',express.static(path.join(uu dirname,'dist'));如果它是一个静态路径号,则只需要访问www.myapplication.com/some/deep/nested/some/deep/nested/01234567890/应用程序的基础;是/some/deep/nested/感谢您的响应,虽然express slash确实在请求中添加了反斜杠,但应用程序仍在删除url,然后才添加后面的反斜杠。当请求通过但不起作用时,这将导致“www.myapplication.com/1234567890/”。我想问题的根源在于为什么Express(或Node.js)在缺少尾部反斜杠时截断url。
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')));