В частях 1 и 2 этого урока мы создали приложение, которое отображает предстоящие заезды с препятствиями и участников, которые будут их запускать. Мы рассмотрели некоторые типичные проблемы облачных приложений для составления списка междоменных запросов и обнаружения служб с помощью проектов Spring Cloud и Netflix, а именно Eureka и Zuul. В третьей части мы завершим реализацию веб-интерфейса нашего приложения.
Во-первых, давайте удостоверимся, что мы можем исправить междоменную проблему, которая возникла у нас при запуске.
Реализация представления о гонках
Откройте main.js
в src/main/resources/static/controllers
папке вашего веб-сервиса. Измените url
свойство $http
вызова на /races
.
angular.module('ocrApp')
.controller('MainCtrl', function ($scope, $http) {
$http({
method: 'GET',
url: '/races'
}).then(function(response) {
$scope.races = response.data;
}, function(response) {
console.error('Error requesting races');
});
});
Убедитесь, что все службы запущены и зарегистрированы в Eureka, и перейдите по адресу http: // localhost: 8080 . Если вы откроете консоль своего браузера, вы больше не увидите междоменных ошибок, и ваш запрос к http: // localhost: 8080 / races должен быть успешно выполнен.
Теперь давайте используем данные, которые мы получаем из запроса, в представлении для основного контроллера. Откройте main.html
в src/main/resouces/static/views
папке веб-службы и измените код на:
<h3>Races</h3>
<ul>
<li ng-repeat="race in races"><a ng-href="/#/participants/{{race.id}}">{{race.name}}</a></li>
</ul>
После сохранения этого файла перейдите по адресу http: // localhost: 8080, и вы должны увидеть список рас:
Щелчок по ссылкам пока не работает, потому что мы не добавили представления или контроллеры для отображения страницы, давайте сделаем это сейчас.
Добавление просмотра участников
Создайте новый файл с именем participants.js
in src/main/resources/static/scripts/controllers
и добавьте следующий код:
angular.module('ocrApp')
.controller('ParticipantsCtrl', function ($scope, $http, $routeParams) {
$http({
method: 'GET',
url: '/participants/races/' + $routeParams.raceId
}).then(function (response) {
$scope.participants = response.data;
}, function(response) {
console.error('Error requesting participants.')
});
});
Этот код просто делает запрос в службу нашего участника (через Zuul), чтобы получить список участников для гонки, на которую мы нажали. Теперь нам нужно представление для отображения имен участников. Создайте файл с именем participants.html
in src/main/resources/static/views
и добавьте следующий код
<h3>Participants</h3>
<ul>
<li ng-repeat="participant in participants">{{participant.firstName}} {{participant.lastName}}</li>
</ul>
Наконец, нам нужно рассказать Angular о новых участниках view и контроллере. Открыть app.js
в src/main/resources/static/scripts
и изменить его , так это выглядит как следующий код
angular
.module('ocrApp', [
'ngAnimate',
'ngCookies',
'ngResource',
'ngRoute',
'ngSanitize',
'ngTouch'
])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.when('/participants/:raceId', {
templateUrl: 'views/participants.html',
controller: 'ParticipantsCtrl'
})
.otherwise({
redirectTo: '/'
});
});
Последнее, но не менее важное, мы должны включить participants.js
в нашу index.html
страницу, чтобы загружался новый JavaScript. Откройте index.html
внутри src/main/resources/static
и внизу, сразу после всех других тегов сценария, добавьте следующий тег сценария в файл:
<script src="scripts/controllers/participants.js"></script>
Это оно! Обновите страницу и попробуйте нажать на ссылки; все они должны работать сейчас, и вы должны видеть каждого участника в каждой гонке.
Поздравляем, вы создали свое первое микросервисное приложение с Spring Boot и Spring Cloud! Конечно, это очень просто и работает только на вашем локальном компьютере, но это не потребовало особых усилий, потому что Spring Boot и Spring Cloud позволяют легко выполнять то, что в противном случае было бы очень сложным заданием.