2017-04-21 15 views
2

私はExpressでAngular2アプリを使用しています。Angular2とExpress

私はこのURLを持っています/v2/tickets?filterId=321。ページをリロードすると、URLは/v2/tickets/?filterId=321に変更されます。これは私のAngular2ルーティングを壊す。

クロムネットワークの呼び出しでは、301がスローされています。

これは私の単純なサーバー構成です:

app.use('/v2', express.static(path.join(__dirname + '/dist'))); 
app.use('/v2/*', express.static(path.join(__dirname + '/dist'))); 

すべてのアイデア、なぜこのリダイレクトが起こっているとどのように私はそれを防ぐことができますか?

+2

のようにノードAにするために、すべてのAPIリクエストを転送表現が全く干渉しない?代わりに残りのAPIを用意する必要があります。 – Chrillewoodz

答えて

3

redictはデフォルトのserve-staticであるため発生します。 express.static('dir', { redirect: false })で無効にできますが、/ v2/ticketsが見つからない場合は404が返されます。 express-staticは同じ動作をします。

あなたは(<base href="/v2">をのような)基本セットを持っている、と私はこれをして仕事ができるのか分からないので、これは

app.get('/v2/*', (req, res) => { 
    res.sendFile(path.join(__dirname, 'dist/index.html')) 
}) 

のようなあなたのAPIのルートではありませんすべてのためのindex.htmlを返しますあなたが投稿したコード。

URLは、後ろにスラッシュを自動的に削除するため、urlのparamsを使用しないと、redictは問題になりません。/v2/tickets/321も動作すれば、これはより見栄えの良いURLでもっとも簡単な解決策になります。
url paramが必要で、expressとserve-staticを使用する場合は、ルーティングのパスに後続のスラッシュを追加するほうが簡単でしょう。

個人的に私はそれが高速であるため、より優れたキャッシング、より多くのオプションを持って、静的ファイルのnginxのを持っていることを好む...とあなたがせているのはなぜ

location /api { 
    proxy_pass http://api; 
} 

location/{ 
    try_files $uri /index.html; 
} 
+0

はい、ベースhrefが '/ v2 /'に設定されています –

+0

今のところ、 'app.get( '/ v2/tickets'、function(req、res、next){ res.sendFile(path.join __dirname + '/dist/index.html')); }); '。 –

+0

これはうまくいくと思われますが、app.getは再読されず、serve-staticはindex.htmlには使用されないため、うまくいくはずです – Julian

関連する問題