【问题标题】:Express Routing: multiple URLs to the same route快速路由:同一路由的多个 URL
【发布时间】:2017-11-16 20:25:13
【问题描述】:

我正在尝试使多个 URL 在单个快速路由上工作。如何使以下 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)

  });

});

【问题讨论】:

    标签: express routes


    【解决方案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)
        });
      );
    

    【讨论】:

      【解决方案2】:

      您可以给它一个名称并将名称传递给router.get,而不是使用匿名函数作为路由的控制器。然后,您可以拥有多个指向同一函数的router.gets。

      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 中提到的正则表达式。不过,我在您的网址中看不到任何模式,因此使用正则表达式想出一个好的解决方案有点困难。

      【讨论】:

      • 做到了。我不得不重新安排我的路线,以便“/”和“/amp”出现在蛞蝓路线之前。感谢您的帮助:)
      猜你喜欢
      • 1970-01-01
      • 2016-11-16
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 2017-02-26
      • 1970-01-01
      • 2021-01-21
      相关资源
      最近更新 更多