1

レガシー システムに対して行う REST API 呼び出しからデータをレンダリングするシングル ページ アプリケーション (AngularJS を使用) を構築しています。このレガシー システムは非常に大きく、Java で記述されており、展開に数分かかるため、レガシー システムとは完全に分離したシングル ページ アプリケーションを開発する方が生産的であると判断しました。

問題は、レガシー システムの REST API と通信しようとしたときに発生しました。どちらのアプリも同じホストにローカルにデプロイされていましたが、別のアプリ サーバーにデプロイされていたため、通信時には別のポートを使用する必要がありました。しかし、SPA は別のポートで REST API と通信していたため、ブラウザーはクロス サイト スクリプティング攻撃から保護するための私の要求を阻止しました。

http リクエストのプロキシを容易にするこのビルド ツール名がlineman (grunt を利用) であることがわかりました。これにより、クロス サイト スクリプティングの制限を回避できましたが、これは開発モードでのみ適していました。

概念実証が機能するようになったので、プロキシを使用せずにこれらのアプリを一緒にデプロイする方法を知りたいと思います。そもそもAngularはあなたがバックエンドを持っているとは想定しておらず、フロントエンドでAngularを使用するほとんどの人はバックエンドでJavaを使用していないため、これを行う方法についてアドバイスを見つけるのは難しいです(それが重要な場合でも) .

アプリのコンテキスト パスは、prod モードと dev モードのどちらでデプロイされているかによって変わるなどの問題に直面しているため、両方のモードで機能するリンク切れを回避する賢い方法を考える必要があります。ここで途中で間違ったステップを踏んだかどうか/どこで間違ったのだろうか. バックエンドとは別のサーバーで SPA を開発するのは避けるべきですか?

4

2 に答える 2

1

同じ問題がありました。URL の状況は、異なる環境にいるため、Java REST API への異なる URL パスを持つことです。

これらのパスを Angular アプリケーションにカスケードするために、最初に Web アプリ (Angular を生成するアプリ) のベース パスを外部化し、デプロイ先に応じてデプロイ中に設定される値を使用する必要がありました。アプリケーションで参照する設定ファイルの XML 値にリンクするアプリ サーバーの値があります。

次に、環境に適した URL を返す (Java REST API ではなく) Angular アプリからそれを生成する Web アプリへの呼び出しを作成します。

Angular アプリケーションでは、正しいベース パスを使用してリソースをセットアップできます (残りの URL は環境間で同じままにする必要があります)。

環境設定を外部化して最初の部分を正しく動作させることができれば、残りは難しくありません。

于 2013-08-23T20:27:17.850 に答える
1

Apache を前に置き、アプリへのリバース プロキシとして mod_proxy を使用します。

REST API が http://localhost:9000 にあるとします。Angular アプリが静的アセットのみの場合は、Apache の直下にデプロイできます。そうでない場合は、それもリバースプロキシします。REST API の場合、たとえば /api から localhost:9000 へのリバース プロキシを yoivsetup します。そのため、 http: //some.host.name/api で apache にヒットするすべてのリクエストは、レガシー システムに転送されます。angularアプリを修正すれば完了です。ローカル開発の場合、同様の方法で簡単にセットアップできる node-http-proxy を使用できます

于 2013-08-24T18:09:03.880 に答える