Redirect all trailing slashes globally in express
disqus, express, node.js
Solution
Try adding a middleware for that;
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();
});
Problem
I am using Node.js and Express and I have the following routing : ``` 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); ``` I have a Disqus widget on my lessons pages and I have noticed a strange behavior that when going to `myapp.com/lessons` and `myapp.com/lessons/` I get two different pages (on of them had a comment I previously added in Disqus and the other one doesn't have a comment). Is there a way to "canonize" all of my urls to be without trailing slashes ? I have tried to add the `strict routing` flag to express but the results were the same Thanks