2015-03-03 59 views
0

我在一個使用幾臺(很多)服務器開發解決方案的環境中工作。他們的微服務風格是楷模。如何創建委託式多角色多主機網站?

爲了能夠升級系統,它們在運行時必須是可切換/可替換的(包括用戶界面)。 已經定下來的主要解決方案是

  1. 一個門戶網站/代理服務器是爲最終用戶
  2. 代理是「知道」唯一可見的系統自動對焦的支持服務器
  3. 代理有一些基本的用戶界面,例如menues。可能與子系統(菜單中的多個條目等)合作
  4. 用戶請求帶有一些動態內容的頁面
  5. 門戶網站將頁面的「內容」部分的查詢中繼/代理到子系統。
  6. 客戶端所需的任何REST調用也通過主服務器進行代理。

的REST調用當然也很簡單,但我太的n00b的角度真正理解如何使「混合。 點5號當然是艱難的一部分,如果子服務器將是可見的IFRAME(eeek!)可能已被使用,但不是在這種情況下。

我需要一個頁面內某種「代表團」的,任何事情之前做了什麼?怎麼做的微服務旗艦處理用戶界面?

回答

2

我現在已經從n00b發展到關於Angular的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文件計算的參數「主機」。

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

但是要解決的第三個問題是處理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); 
});