ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2-12 HttpClient Promise를 사용하여 영웅목록 가져오기
    앵귤러/01 퀵스타트 & 튜토리얼 2017. 8. 9. 09:07

    HttpClient Promise를 사용하여 영웅목록 가져오기

     

    지금까지 만든 앱을 개선해보자

    l  서버에서 영웅 데이터 가져오기

    l  영웅 추가, 편집, 삭제

    l  변경사항 서버에 저장

     

    http서비스를 사용하려면 @angular/common/http라이브러리에서 HttpClientModule을 임포트해야 한다.

    src/app/app.module.ts

    import { NgModule }       from '@angular/core';

    import { BrowserModule }  from '@angular/platform-browser';

    import { FormsModule }    from '@angular/forms';

    //import { HttpModule }     from '@angular/http';

    import { HttpClientModule } from '@angular/common/http';

     

    import { AppComponent }         from './app.component';

    import { DashboardComponent }   from './dashboard.component';

    import { HeroDetailComponent }  from './hero-detail.component';

    import { HeroesComponent }      from './heroes.component';

    import { HeroService }          from './hero.service';

     

    import { AppRoutingModule }     from './app-routing.module';

     

    @NgModule({

      imports: [

        BrowserModule,

        FormsModule,

        //HttpModule,

        HttpClientModule,

        AppRoutingModule

      ],

      declarations: [

        AppComponent,

        DashboardComponent,

        HeroDetailComponent,

        HeroesComponent

      ],

      providers: [ HeroService ],

      bootstrap: [ AppComponent ]

    })

    export class AppModule { }

     

    getHeroes()메소드를 Http를 사용하여 수정한다.

    src/app/hero.service.ts

    import { Injectable } from '@angular/core';

    import { HttpClient }       from '@angular/common/http';

    import 'rxjs/add/operator/toPromise';

     

    import { Hero } from './hero';

    import { HEROES } from './mock-heroes';

     

    @Injectable()

    export class HeroService {

      private heroesUrl = 'http://localhost:3000/heroes';

     

      constructor(private http:HttpClient){}

     

      getHeroes(): Promise<Hero[]> {

        return this.http.get(this.heroesUrl)

            .toPromise()

            .then(response => response as Hero[])

            .catch(this.handleError);

      }

     

      getHero(id:number):Promise<Hero>{

        return this.getHeroes()

          .then(heroes => heroes.find(hero => hero.id === id));

      }

     

      private handleError(error: any): Promise<any> {

        return Promise.reject(error.message || error);

      }

    }

     

    앵귤러 http.get메소드는 RxJS Observable을 리턴한다. Observable타입을 이용하여 처리할 수도 있지만 여기서는 Promise로 변환하여 사용하기 위해 toPromise()메소드로 Promise타입으로 변환하였다.

    toPromise를 사용하기 위해 rxjs라이브러리를 임포트 한다.

    import 'rxjs/add/operator/toPromise';

     

    Promise then콜백함수를 이용하여 Reponse에서 데이터를 추출한다.

    .then(response => response as Hero[])

     

    에러 처리를 위해 catch메소드에 에러를 처리할 메소드를 등록한다.

    .catch(this.handleError);

     

    실제 에러 처리 메소드

    private handleError(error: any): Promise<any> {

      console.error('An error occurred', error); // for demo purposes only

      return Promise.reject(error.message || error);

    }

     

    '앵귤러 > 01 퀵스타트 & 튜토리얼' 카테고리의 다른 글

    2-14 http를 이용한 영웅 추가  (0) 2017.08.09
    2-13 http를 이용한 영웅 수정  (0) 2017.08.09
    2-11 json-server 설치  (0) 2017.08.08
    2-10 스타일 적용하기  (0) 2017.08.08
    2-9 영웅 내역으로 조회  (0) 2017.08.06

    댓글

Designed by Tistory.