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 文件的脚本标记计算的参数“主机”。

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);
});
于 2015-03-05T12:39:36.717 回答