2017-11-16 14 views
0

複数のURLを1つの高速ルートで動作させようとしています。次の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) 

    }); 

}); 

答えて

2

代わりにO匿名関数をルートコントローラとして使用している場合は、名前を付けて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); 

これはルートが2つしかない場合に最適です。

ルートがたくさんある場合は、manualに記載されている正規表現のものを使用する必要があります。私はあなたのURLにパターンが表示されませんので、正規表現を使用して良い解決策を考えるのは少し難しいです。

+0

それをしました。私は "/" "/ amp"がスラグルートの前に来るように私のルートを並べ替える必要があった。助けてくれてありがとう :) – jwerre

関連する問題