У меня есть основы Spring Cloud, работающего со шлюзом (с Zuul Proxy), проксирующим конечные точки отдыха (/ ui, / admin как отдельные микросервисы). Я подписываюсь на весенний блог Дэйва Сайера
zuul:
routes:
ui:
url: http://localhost:8081
admin:
url: http://localhost:8082
resource:
url: http://localhost:9000
Идея состоит в том, что gateway
(Zuul) будет работать на 8080, а интерфейсные приложения (UI
и Admin
) будут знать только gateway
и не будут знать URL-адреса ui
и admin
серверной части. Приложение администратора просто свяжется с `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» во все ссылки href во всем коде HTML и JS в админке нежелательно. Как я могу это преодолеть (как сохранить относительные ссылки в моем коде администратора)?