我有 Spring Cloud 使用网关(使用 Zuul 代理)代理休息端点(/ui、/admin 作为单独的微服务)的基础知识。我正在关注Dave Syer 的 Spring Boot 博客
zuul:
routes:
ui:
url: http://localhost:8081
admin:
url: http://localhost:8082
resource:
url: http://localhost:9000
这个想法是gateway
(Zuul) 将在 8080 上运行,前端应用程序 (UI
和Admin
) 将只知道gateway
并且不知道ui
和admin
后端 URL。管理应用程序只需联系 ` http://localhost:8080/admin '
设置工作正常,除了前端应用程序(例如admin
:)必须将/admin
路由硬编码为所有 JS 和 HTML 代码中的前缀。以下2个例子:
以下不起作用(在 admin.js 中)。
angular.module('admin', []).controller('home',
function($scope, $http) {
var computeDefaultTemplate = function(user) {
$scope.template = user && user.roles &&
user.roles.indexOf("ROLE_WRITER")>0 ? "write.html" : "read.html";
}
但是,以下确实有效:
angular.module('admin', []).controller('home',
function($scope, $http) {
var computeDefaultTemplate = function(user) {
$scope.template = user && user.roles &&
user.roles.indexOf("ROLE_WRITER")>0 ? "admin/write.html" : "admin/read.html";
// ..... !! NOTE the hardcoding of 'admin/' prefix route !!!
}
管理应用程序中存在类似问题:index.html
工作(但不希望):
<body ng-app="admin" ng-cloak class="ng-cloak" ng-controller="home">
...
..... !! NOTE the hardcoding of 'admin/' prefix route !!!
<script src="admin/js/admin.js" type="text/javascript"></script>
....
</body>
</html>
不起作用:
<body ng-app="admin" ng-cloak class="ng-cloak" ng-controller="home">
...
<script src="js/admin.js" type="text/javascript"></script>
....
</body>
</html>
显然,这种将“/admin”路由硬编码到管理员中所有 HTML 和 JS 代码中的所有 href 链接的做法是不可取的。我该如何克服这个问题(如何在我的管理代码中保留相关引用)?