快速路由:到同一路由的多个URL

时间:2017-11-16 20:25:13

标签: express routes

我正在尝试让多个网址在单个快速路由上运行。如何将以下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)

  });

});

2 个答案:

答案 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)
    });
  );