2017-12-12 20 views
0

Expressでのルーティングは非常に簡単ですが、/で終わるパスに調整するのに問題があります。誰かがおよそビューがレンダリングされるwww.example.com/aboutにナビゲートする場合は今Express - ルーティングパスの終了時/終了を許可する

app.get('/about', (req,res) => res.render('about')); 

:たとえば は、私は、次のルートを定義示唆しています。しかし、同じ人がwww.example.com/about/にナビゲートすると、上記で指定したルートは動作しません。いくつかの人々(私が含まれています)は、パスの最後に/を自然に追加することに慣れてきました。私はExpress routing documentationのページを読んだが、開発者はこの可能性を知らないようだった。これまで私が見つけた唯一の解決策は、このバリエーションを説明するために各ルートごとに正規表現を使用することです。たとえば、上のルートは、次のようになります。

app.get(/\/about\/?/, (req,res) => res.render('about')); 

Expressのクローズ/パスのパスを許可するより洗練された(または組み込みの)ソリューションはありますか?

+0

HTTP apacheのstandered//about/index.phpなど/about/index.htmlとウェブframenworkの使用同じことを意味/について、あなたは混乱しているところ – shivshankar

+0

はい。私が書いた文章は少し誤解を招いていた。 PHP MVCの比較がこの問題を解決するのに本当に役に立たないので、私はそれを削除します。 – Nadav

答えて

1

この質問はすでにhttps://stackoverflow.com/a/15773824/515774

に回答されている基本的には、末尾にスラッシュを取り除くと、あなたの問題を解決するリダイレクト要求を、作るミドルウェアを追加する必要があります。

以下は前の回答のコードスニペットです。

app.use(function(req, res, next) { 
    if (req.path.substr(-1) == '/' && req.path.length > 1) { 
     var query = req.url.slice(req.path.length); 
     res.redirect(301, req.path.slice(0, -1) + query); 
    } else { 
     next(); 
    } 
}); 

リダイレクトを回避するには、URLを書き換えるだけです。参照https://stackoverflow.com/a/13446128/515774

注:この方法を使用すると、ブラウザのURLは変わりません。

app.use(function(req, res, next) { 
    if (req.url.slice(-1) === '/') { 
    req.url = req.url.slice(0, -1); 
    } 
    next(); 
}); 
+0

私に答えを見せていただきありがとうございます。この問題を説明することは難しかったので、検索することも難しくなりました(用語はかなり曖昧です)。それは優れた解決策です。 – Nadav

+0

残念ながら、あなたが上に書いた解決策はリダイレクトを必要とします。リダイレクトは、正規表現を使用するよりも時間がかかります。 Expressがapp.getメソッドに達する前に、Expressがapp.get(path、callback)をチェックするために使用するパスを変更する方法はありませんか? – Nadav

+0

@Nadav答えを更新しました – Muthukumar

関連する問題