我有Spring Cloud的基础知识,使用网关(使用Zuul Proxy)代理休息端点(/ ui,/ admin作为单独的微服务)。我正在关注spring boot blog by Dave Syer
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
后端结束网址。管理员应用只会联系“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链接都是不可取的。我怎样才能克服这个问题(如何在管理代码中保留相对引用)?
答案 0 :(得分:0)
尝试使用它:
zuul:
routes:
admin:
path: /admin/**
stripPrefix: true
url: http://localhost:8082