使用以下路线:
app.get('/', controller.web.Home);
我如何在'/'
内添加允许匹配/
,/index
和/index.html
的内容?我还想对所有其他路由使用此方法,以便用户在将.html添加到路径时看不到错误页面。
我在Express网站上看到了这一点,但是对于匹配倍数没有明确的解释。提前谢谢。
答案 0 :(得分:5)
Express使用path-to-regex来表示路由字符串,这意味着您可以使用正则表达式或字符串模式来匹配路由。
我如何在'/'内添加允许匹配/,/ index和/index.html的内容
这样的事情会起作用:
app.get('/|index|index.html', controller.web.Home);
我还想对所有其他路由使用此方法,以便在将.html添加到路径时用户不会看到错误页面。
您还可以编写一个小辅助函数来处理任何路径:
function htmlExt(route) {
return route + '|' + route + '.html';
}
并将它用于任何路线:
app.get(htmlExt('index'), controller.web.Home);
app.get(htmlExt('blog'), controller.web.Blog);
// ...
您也可以传入一系列路径,这样也应该有效:
function htmlExt(route) {
return [route, route + '.html'];
}
app.get(htmlExt('index'), controller.web.Home);
另一种方法是使用正则表达式。也许是接受路线和可选.html
分机的人:
app.get(/index(.html)?/, controller.web.Home);
您可以在Express Routing docs中找到其他有用的示例。
答案 1 :(得分:2)
您可以将路径数组定义为第一个参数:
app.get(['/', '/index' , '/index.html'], controller.web.Home);
答案 2 :(得分:0)
使用express 4.x
app.get('/(index*)?', controller.web.Home);
答案 3 :(得分:0)
如果您想要全局方法,可以使用中间件功能。把它放在你所有的路线之前。
app.use(function(req, res, next) {
var match = req.path.match(/(.*)\.html$/)
if (match !== null) {
res.redirect(match[1]);
} else {
next();
}
});
它将以.html结尾的每个路径重定向到没有此扩展名的路由。 当然路线路径' /'需要单独处理。