2017-08-30 14 views
0

expressを使用して静的ディレクトリを提供するバックエンドが、/にあります。そこには単一ページのフロントエンドが含まれています。このバックエンドはAPI RESTも提供します。アドレスバーを使用して単一のページアプリケーションにユーザをルーティングする

フロントエンドはReactで構築され、リアクションルータを使用してWebアプリケーションのさまざまなビューからユーザーをルーティングします。私の反応-ルータの場合

は、2つのエントリを持っているユーザーは、Webブラウザのアドレスバーに直接URLを入力した場合、私は、アプリケーションのビューにクライアントをリダイレクトすることができますどのように/app/config

を言わせて?

現時点では、Expressはリクエストを受け取り、単一ページが/パスに配信されるため、明らかに404メッセージを返します。

答えて

2

これを解決する簡単な方法は、常に(404でも)エクスプレスルートハンドラにindex.htmlをユーザに送信することです。

参照:https://stackoverflow.com/a/25499007/2624575

は、しかし、あなたはいくつかの世話をする必要があります。

1)あなたは、ルータコードを反応させるのは、404エラーを処理するために開始する必要があります:https://stackoverflow.com/a/37491381/2624575

2)あなたが正しく処理する必要がありますあなたの資産(アイコン、CSS、jsなど)へのパス。そうでなければ、同じ種類のリソースに同じindex.htmlを送信します(ページが正しくレンダリングされません)。

3)幸いなことに、react-routerbrowserHistory(ハッシュを使用しない履歴#)を使用しています。このようにして、経路は正しく表示されます。

+0

明確にするために:明示的に静的なサービスを取り除き、フロントエンドでリクエストのパスを確認する必要がありますか? – lilezek

+0

@lilezek(すべての資産をエクスプレスで提供する必要があるため)まだ静的なサービスを提供する必要があります。 404であっても、常に 'index.html'を提供するルールを追加するだけです。問題は今ではexpressが "/ app"と "/ config"を404と扱っているが、代わりに 'index.html'が必要だったということです。わかりますか? –

+0

はい、私はその部分を理解しましたが、反応ルータは 'index.html'を与えた後、アドレスバーからアプリケーションビューにユーザーをルーティングしますか?フロントエンドでさらに何かをしなければならないのですか? – lilezek

関連する問題