2017-06-14 6 views
0

問題は、URLからクエリ文字列を取得し、指定された製品ページを取得するための初期フェッチ要求があることです。Sagaサーバー側のレンダリングリダイレクトを使用するリアルーター

クライアント側とサーバー側で同じロジックとルーティングが使用されます。

APIリクエストはredux-sagaで実行されますが、失敗した場合(一致する商品がない場合)、そのサイトはすでに/productルートにあり、リダイレクトが発生する必要があります。クライアント側では

それはbrowserHistoryまたはちょうどwindow.location.hrefを使用して動的にリダイレクトすることができ、これは、非常に簡単ですが、サーバー上で、私はおそらく、resオブジェクトを伝承し、res.redirectを使用しなければならないだろう、使用する異なる2このアプローチで関数をリダイレクトします。

もう1つの解決策は、これを最上位の方法で捕捉することです。 ReactDOMServer.renderToString(component)の間のexpress index.js、および失敗したときにクライアント側のエンドポイントで、別のロジックを使用します。たとえば、高速リダイレクトを伴う404ビュー。しかし、とにかくsagaが最上位の階層ではないので、この404を投げ、最上位のコンテキスト(エクスプレスサーバー)にキャッチすることは、非常に「汚い」試行錯誤の方法でそれを渡す必要があります。

正確性の点でどのように取り組むべきですか?明示的にルーティングロジックを2倍にしたくないので、同型コードでうまく処理するようにしたいと思います。

答えて

0

おそらく、メインステートがフロントエンドコードによって取得される可能性があります。サガから返されたすべての呼び出しは、その状態を更新できます。 reduxサガが必要なデータを返さない場合は、set404()set301()のアクションを使用しています。これらのアクションはトリガされ、メイン状態オブジェクトにreturn404: trueまたはreturn301: trueを設定します。だから私たちのアプリケーションを文字列にレンダリングする前に、そのオブジェクトを検査します。いずれかが存在する場合は、サーバーから関連する応答を返します。

関連する問題