0

私は、複数の (多数の) サーバーを使用してソリューションを開発する環境で働いています。彼らのマイクロサービス スタイルはロール モデルです。

システムをアップグレードできるようにするには、実行時に切り替え可能/交換可能 (ユーザー インターフェイスを含む) である必要があります。決定された主な解決策は、

  1. ポータル/プロキシは、エンド ユーザーに表示される唯一のシステムです。
  2. プロキシは、サポートしているサーバーを「認識」しています
  3. プロキシには、メニューなどの基本的なユーザー インターフェイスがあります。サブシステムと連携している可能性があります (メニューのいくつかのエントリなど)。
  4. ユーザーが何らかの動的コンテンツを含むページをリクエストします
  5. ポータルは、ページの「コンテンツ」部分のクエリをサブシステムにリレー/プロキシします。
  6. クライアントが必要とする REST 呼び出しも、メイン サーバーを介してプロキシされます。

もちろん、REST 呼び出しは非常に単純ですが、私は Angular に慣れていないため、「ミックス」を作成する方法を本当に理解できません。ポイント 5 はもちろん難しい部分です。サブサーバーが表示されていれば、iframe (eeek!) が使用されていますが、この場合は使用されていません。

ページ内である種の「委任」が必要ですが、以前に行ったことはありますか? マイクロサービスの主力製品はユーザー インターフェイスをどのように処理しますか?

4

1 に答える 1

2

私は今、Angularに関してn00bからn00b++に進化しました。

解決策は、Angular 内のテンプレートに使用される HTML スニペットにあります。

JS ファイルと HTML ファイルを使用して HTML テンプレートを定義できます。JS ファイルは、URL によって HTML ページを参照します。通常(私が見たサンプルでは)パスは次のように相対的です。

angular.module('myApp.view1', ['ngRoute'])
.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/view1', {
    templateUrl: 'view1/view1.html',
    controller: 'View1Ctrl'
  });
}])
.controller('View1Ctrl', [function() {}]);

しかし、絶対パスを使用することで、外部リソースを参照できます。

angular.module('myApp.view2', ['ngRoute'])

.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/view2', {
    templateUrl: host + '/app/view2/view2.html',
    controller: 'View2Ctrl'
  });
}])
.controller('View2Ctrl', [function() {}]);

この JS ファイルを含むスクリプト タグを見て、計算されたパラメータ「host」を追加したことに注意してください。

var scripts = document.getElementsByTagName('script');
var src = scripts[scripts.length - 1].src;
var host = src.match(new RegExp('https?://[^/]*'))[0];

しかし、取り組むべき 3 番目の問題は、CORS の問題を処理することです。テスト環境 (node.js+express) に「cors」ライブラリを追加したところ、「外部」サイトにアクセスできました。

var express = require('express'), 
    cors = require('cors'), 
    app = express();

app.use(cors());
app.use("/", express.static(__dirname));

app.listen(8001, function(){
    console.log('CORS-enabled web server listening on port', 8001);
});
于 2015-03-05T12:39:36.717 に答える