Как Angular узнает, какой Spring Boot REST API вызывать? - PullRequest
0 голосов
/ 17 июня 2019

Например: у меня есть Angular Login, Register, Logout Components. У меня также есть контроллеры Spring Boot Rest для входа, регистрации и выхода из системы. Как Angular узнает о карте -

Login Component ==> Login Controller
Register Component ==> Register Controller
Logout Component ==> Logout Controller

Я использую Spring Boot 2.1.2 и Angular 7.

Я исследовал и обнаружил, что HTTPClientModule отвечает за связь с REST API и FormsModule, HttpModule участвуют.

Я также узнал, что при добавлении этого кода:

{
    "/api": {
        "target": "http://localhost:8080",
        "secure": false
    }
}

- proxy.conf.json объединит Angular и Spring Boot, но это не то, что я хочу.

Я ищу способ вызова функции REST API в Angular.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 17 июня 2019

Angular никогда не отображает URL в контроллер пружины. На самом деле приложение Angular, запущенное в браузере, ничего не знает о службах, развернутых где-то на сервере.

HttpClientModule ничего не знает о вещах на стороне сервера. Он не знает, отправляете ли вы запрос на api/login url, он должен перейти на LoginController или что-то еще.

Добавляя запись, как показано в вопросе, внутри proxy.conf.json, все, что вы делаете, это настраиваете конфигурацию для перенаправления вызова, чтобы избежать каких-либо проблем CORS.

Таким образом, HTTPClientModule делает вызов API, угловое приложение проверяет, настроен ли прокси-сервер, если это вызов, выполняемый для цели прокси-сервера, если нет, выполняется вызов по предоставленному URL-адресу.

Теперь службы, развернутые на proxy target, входят в картину: Когда вызывается API-интерфейс, он сначала достигает базового URL-адреса служб: /api/ - это путь, определенный в вашем приложении: spring.data.rest.basePath=/api.

Spring Boot по умолчанию использует Apache Tomcat, поэтому каждый HTTP-запрос, отправляемый на веб-сервер Tomcat, обрабатывается сервлетом Java.

Пружина DispatcherServlet обеспечивает следующие функции:

  • отображение HTTP-запроса на определенный метод обработки
  • парсинг данных и заголовков HTTP-запросов в объекты передачи данных (DTO) или объекты домена
  • взаимодействие модель-вид-контроллер
  • генерация ответов от DTO, доменных объектов и т. Д.

DispatcherServlet : Центральный диспетчер для обработчиков / контроллеров HTTP-запросов, например для контроллеров веб-интерфейса или экспортеров удаленных услуг на основе HTTP. Отправляет зарегистрированным обработчикам для обработки веб-запроса, предоставляя удобные средства отображения и обработки исключений.

Это сердце инфраструктуры Spring Web MVC; этот основной компонент получает все запросы к вашему приложению. Чтобы найти обработчик, соответствующий запросу, Spring просматривает зарегистрированные реализации интерфейса HandlerMapping

0 голосов
/ 17 июня 2019

Если вам необходимо при желании обойти прокси-сервер или динамически изменить запрос до его отправки, определите конфигурацию в proxy.conf.js, например,

    const PROXY_CONFIG = {
    "/api/proxy": {
        "target": "http://localhost:3000",
        "secure": false,
        "bypass": function (req, res, proxyOptions) {
            if (req.headers.accept.indexOf("html") !== -1) {
                console.log("Skipping proxy for browser request.");
                return "/index.html";
            }
            req.headers["X-Custom-Header"] = "yes";
        }
    }
}

module.exports = PROXY_CONFIG;

И в вашем angular.json вам нужно указать туда свой 'proxy.config.js',

 "architect": {
  "serve": {
    "builder": "@angular-devkit/build-angular:dev-server",
    "options": {
      "browserTarget": "your-application-name:build",
      "proxyConfig": "proxy.conf.js"
    },

подробная информация здесь

...