Angular 5 или 6 подписок не работают при использовании прокси - PullRequest
0 голосов
/ 24 мая 2018

Я построил Java Restful API и хочу получить к нему доступ из Angular 5. Для разработки у меня есть угловой сервер, работающий на порте 4200, в то время как мой бэкэнд работает на 8080. Я пытаюсь настроить прокси в angular для связи сбэкенд.Итак, я создал следующий файл proxy.conf.json:

{
  "/**": {
    "target": "http://localhost:8080",
    "changeOrigin": true,
    "secure": false,
    "logLevel": "debug"
  }
}

Затем я запускаю в терминале

ng serve --proxy-conf proxy.conf.json

и получаю сообщение

Proxy created: /**  ->  http://localhost:8080
[HPM] Subscribed to http-proxy events:  [ 'error', 'close' ]      

Так что до сих пор все в порядке.

Когда я набираю URL браузера, например,

http://localhost:4200/incidents/all

все работает нормально, и я получаю ответ

[{"id":55, "protocolNo": 121212222, "дата": 1525122000000, "isPayed": правда, "yliko": "fdasdfasfsaf", "Makro": "fdsa", "anoso": "fdsa", "Mikro": "fdsafds" "symperasma": "dfsdfsadf", "klinikesPlirofories": "fsdafds", "Histo": "dfsadffga", "simpliromatikiEkthesi": "fdsadfsdfa", "пациент": { "ID": 1, "FirstName":"Μιχαήλ», "LastName": "Τουτουδάκης", "День рождения": "1975-08-19", "Отчество": "Δημήτριος", "телефон": "6948571893", "электронная почта": "mixtou@gmail.com", "секс": правда, "город": { "ID": 1, "имя": "Χανιά"}}, "доктор": { "ID": 1, "имя": "όνομα", "LastName": "επίθετο", "телефон": "2821074737", "электронная почта": "papa@papa.com", "Отчество": "πατέρας", "специальность": { "ID": 1, "имя": "Αγγειοειρουργική "}," city ": {" id ": 1," name ":" Χανιά "}}," clinic ": {" id ": 1," name ":" Κλινική Τσεπέτη "," phone ":"123456789" , "адрес": "Παπαναστασίου", "электронная почта": "test@test.com"}, "signingDoctor": { "ID": 1, "LastName": "Δασκαλάκη", "Имя": "Άννα"}, "mikroskopikaSymperasma": NULL, "anosoEkthesi": нулевой, "рак": истинно}, { "идентификатор": 56, "protocolNo": 11111, "дата": 1525640400000, "isPayed" ложь "yliko":"dfsadfs", "Makro": "dfsfsdfdsdfsadfsa", "anoso": "dfsdfsfdssfafasd", "Mikro": "dsfdfsadfsadfssdf", "symperasma": "σδγσδγσαδγσγσασδγ", "klinikesPlirofories": "δδφφγφγαφαγ", "Histo": "fdsasdfd" "simpliromatikiEkthesi": "γαγσαδσγσδγσδαγ", "пациент": { "ID": 5, "Имя": "Στέφανος", "LastName": "Μαριόλος", "День рождения": "2018-03-26","Отчество ":" " "телефон": "4838583845", "электронная почта": "", "секс": правда, "город": { "ID": 2, "имя": "Ρέθυμνο"}}," доктор": {" ID ": 3," Firstname: " "Χαράλαμπος LastName": ""," телефон Πρωτοπαπαδάκης """:" 4343454345 "," email ":" ", FatherName": "", "speciality": {"id": 29, "name": "Πνευμονολογία - Φυματιολογία"}, "city": {"id": 1, "name": "Χανιά"}}, "clinic": {"id": 1, "name": "Κλινική Τσεπέτη", "phone": "123456789", "address": "Παπαναστασίου", "электронная почта ":" test@test.com "}," signingDoctor ": {" ID ": 1," LastName ":" Δασκαλάκη " "Имя": "Άννα"}, "mikroskopikaSymperasma": "γσαγδσασαδγδασγαγσγσ"," anosoEkthesi":" φδαφγφγφδσγ "," Cancer ": true}]

Однако, посещая конечную точку бэкенда из углового, я ничего не получаю.Для инцидентов, например, у меня есть следующий сервис:

getIncidents(): Observable<Incident[]> {
    console.log('getting incidents');
    const incidentsUrl = '/incidents/all';
    return this.http.get<Incident[]>(incidentsUrl)
      .pipe(catchError(ErrorHandler.handleError));
  }

, который генерирует следующую ошибку в консоли javascript:

core.js:1440 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'push' of undefined
TypeError: Cannot read property 'push' of undefined

В следующей строке:

this.subscriptions.push(this.incidentsService.getIncidents().subscribe((results) => {
              this.comService.sendIncidents(results);
              this.spinner.hide();
            }));

Что означает, что this.incidentsService.getIncidents () ничего не возвращает ??

Любые идеи ??

1 Ответ

0 голосов
/ 25 мая 2018

Я удалил действие this.subscriptions.push(...) и все работает нормально.Почему это происходит при использовании подписок.Я нуждаюсь в них, потому что onDestroy я звоню subscription.unsubsribe(), чтобы избежать утечек памяти.Обратите внимание, что это происходит при использовании прокси.Если я не использую прокси и не разверну проект для Tomcat, все будет хорошо.Я не получаю null внутри push ().Есть идеи ???

Проблема была при объявлении подписок.В начале это было:

subscriptions: Subscription[];

Я изменил его на

subscriptions: Subscription[] = [];

и все работало нормально.

subscriptions

не инициализирован.

...