我正在尝试让多个网址在单个快速路由上运行。如何将以下URL全部路由到同一页面?
看起来这应该有效,但事实并非如此:
router.get("/:slug?(/amp)?", function(req, res, next) {
if (!req.params.slug) {
req.params.slug = 'home'
}
getData(slug, function(err, data){
res.render('index', data)
});
});
答案 0 :(得分:2)
您可以为其命名并将名称传递给router.get
,而不是使用匿名函数作为路由控制器。然后,您可以将多个router.get
指向同一个函数。
function slugController(req, res, next) {
if (!req.params.slug) {
req.params.slug = 'home'
}
getData(slug, function(err, data){
res.render('index', data)
});
});
router.get("/page-slug-name", slugController);
router.get("/page-slug-name/amp", slugController);
router.get("/", slugController);
router.get("/amp", slugController);
如果只有几条路线,这种效果最好。
如果您有大量路线,则必须使用manual中提到的正则表达式内容。我不会在您的网址中看到任何模式,因此使用正则表达式提供一个好的解决方案有点困难。
答案 1 :(得分:1)
您可以通过在一个数组中放置多个 URL 来将它放在单个快速路由中。 在您的情况下,这将是
app.get(['/', '/:slug', '/amp', '/:slug/amp'], function(req, res, next) {
if (!req.params.slug)
req.params.slug = 'home'
getData(slug, function(err, data){
res.render('index', data)
});
);