一尘不染

在Express中全局重定向所有尾随斜杠

node.js

我正在使用Node.js和Express,并且具有以下路由:

app.get('/', function(req,res){
    locals.date = new Date().toLocaleDateString();

    res.render('home.ejs', locals);
});

function lessonsRouter (req, res, next)
{
    var lesson = req.params.lesson;
    res.render('lessons/' + lesson + '.ejs', locals_lessons);
}

app.get('/lessons/:lesson*', lessonsRouter);


function viewsRouter (req, res, next)
{
    var controllerName = req.params.controllerName;
    res.render(controllerName + '.ejs', locals_lessons);
}
app.get('/:controllerName', viewsRouter);

我有一个Disqus小部件上我的课的网页,我注意到一个奇怪的行为是要当myapp.com/lessonsmyapp.com/lessons/我得到两个不同的网页(对他们都有我以前在Disqus增加,而另一个没有评论评论)。

有没有一种方法可以将我的所有网址“规范化”为不加斜杠?我尝试添加strict routing标志来表达,但结果相同

谢谢


阅读 351

收藏
2020-07-07

共1个答案

一尘不染

尝试为此添加中间件;

app.use((req, res, next) => {
  const test = /\?[^]*\//.test(req.url);
  if (req.url.substr(-1) === '/' && req.url.length > 1 && !test)
    res.redirect(301, req.url.slice(0, -1));
  else
    next();
});
2020-07-07