2013-12-16 4 views
5

を認識しませんルータ(いない以前の1):/public定義が最初に来るのでNode.js/Expess.js。すべての要求はこれをキャッチしている -</p> <pre><code>var public_dir = path.join(__dirname, 'public'); app.use('/public', express.static(public_dir)); </code></pre> <p>しかし、私はこれらの行の下に追加するとき:ワイルドカードルータで使用する場合は、静的ルーター、私は私の他のすべてのルートでのみ、このルートを使用する場合、その静的ファイルがうまく務め

app.get('/*', function(req, res){ 
    res.redirect('/#!' + req.path); 
}); 

それは、私には奇妙です。しかし、すべてのリクエストは最後に定義された/*要求ハンドラに送られます。

ページhttp://127.0.0.1:3000/public/website/application.jsを開こうとすると、http://127.0.0.1:3000/#!/public/website/application.jsにリダイレクトされます。それがなぜ起こるのか、この状況を最良の方法で解決する方法は?

ありがとうございました!


解決は簡単です。私はミドルウェアのリストで声明を出していません。

app.use(app.router); 

これは、URLルーティングの問題を引き起こします。しかし、node.jsがミドルウェアの「誤った設定」について教えてくれていないのは不思議です。

+1

で見つけ意味その第二と..? – DrCord

+1

@DrCordが述べるように、app。[get | post | put | etc]メソッドがルータに追加されます。したがって、ルータを最初にマウントすると、最初にルータが使用されます。 –

+0

Nickのようにルータと静的決定の優先順位を述べた。ルータと静的な(相対的な)位置の使い方を示してください。 – user568109

答えて

4

あなたのコードに間違いはありませんが、存在しないもののリクエストはget( '/ *'、...)によってキャッチされることに注意してください。

これは言った、あなたは/publicpublic_dirをロードpublic_dirが定義されている場合は、ファイルにアクセスするためにhttp://127.0.0.1:3000/public/application.jsをしなければならないpublic/website/としてあなたが最初とapp.getでapp.use使用している/public/website/application.js

+0

ええ、パブリックフォルダ内のファイルのパスにpublicを含める必要はありません。 – DrCord

+0

私のコードを以下に更新しました。私は '/ public'を使って、' public directory'に移動しました。ここには、いくつかのサブディレクトリ( 'website 'を含む)があります。私は 'app.get( '/ *'、...)'定義だけ​​を削除したときに私の静的ファイルをブラウザに表示します。 –

+0

それは奇妙です、他の何かが相互作用している必要があります。私はhttps://github.com/BaNzounet/so-expressをここで再現しました。これはあなたが記述したものです。 – BaNz

関連する問題

 関連する問題