Ionic 3: нет ответа на вызов REST API - PullRequest
0 голосов
/ 19 сентября 2018

вот моя проблема:

У меня есть конечная точка (GET), которая в результате дает мне объект JSON: «localhost: 3305 / v1 / пациентов». Я использую Ionic 3 с поставщиком «RestProvider».Мой rest.js выглядит так:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';

@Injectable()
export class RestProvider {
    apiUrl = 'localhost:3305/v1';
    constructor(public http: HttpClient) {
        console.log('Hello RestProvider Provider');
    }

    getPatients() {
        return new Promise(resolve => {
            this.http.get(this.apiUrl+'/patients').subscribe(data => {
                resolve(data);
                console.log(data);
            }, err => {
                console.log(err);
            });
        });
    }
}

home.ts:

import { Component } from '@angular/core';
import { RestProvider } from '../../providers/rest/rest';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})

export class HomePage {
    patients: any;
  constructor (public restProvider: RestProvider) {
     this.getPatients();
    }

    getPatients() {
        this.restProvider.getPatients()
        .then(data => {
            this.patients = data;
            console.log(this.patients);
        });
    }
}

home.html:

<ion-content>
  <ion-navbar>
    <ion-title>My patients</ion-title>
  </ion-navbar>
  <ion-list>
    <ion-list-header>My patients</ion-list-header>
  </ion-list> 
  <ion-list inset>
    <ion-item *ngFor="let patient of patients">
      <p>{{patient}}</p>
    </ion-item>
  </ion-list>
</ion-content>

Проблема: ошибки нет, нотам ничего не показано в представлении.console.log (данные);из rest.js показывает: [объект объекта].

Кто-нибудь знает, где ошибка?Спасибо в связи!

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Нужно переписать getPatients() код следующим образом:

getPatients() {
    return this.http.get(this.apiUrl+'/patients', {
      headers: new HttpHeaders().set('Content-Type', 'application/json'),
    })
   .toPromise()
}

И получение данных в home.ts

getPatients() {
    this.restProvider.getPatients().then((res => { 
        this.patients = data;
    }, (err) => {
       console.log("rejected"); 
    })
}
0 голосов
/ 20 сентября 2018

Не забудьте разобрать ответ от json, например, так, как вы предпочитаете.

getPatients() {
    return new Promise((resolve, reject) => {
        this.http.get(`${this.apiUrl}/patients`).subscribe(data => {
            try {
               response = response.json();
               resolve(response);
            } catch (error) {
               console.log('[api-153]', response);
               reject(response);
            }
            console.log(data);
            resolve(data);
        }, err => {
            console.log(err);
        });
    });
}
0 голосов
/ 19 сентября 2018

Поскольку вы используете современный Angular, вам следует использовать методы http в соответствии с документацией:

В вашем сервисе:

getPatients() {
            return this.http.get(this.apiUrl+'/patients')
}

В вашем компоненте:

getPatients() {
        this.restProvider.getPatients()
        .subscribe(data => {
            this.patients = data;
            console.log(this.patients);
        });
    }

В основном используют наблюдаемые, как указано в комментариях

...