2017-04-21 21 views
0

私は前部にAngular、後部にLaravel 5.0を使用するアプリケーションを開発しようとしています。角度4.x HTTPクライアントのエラー処理

HTTPリクエストでは、エラーが発生することがあります。

これは角度 JSON ように私のメニューを提供し、私のMenuController.phpです:

private menusUrl = '/api/menu'; 

constructor (private http: Http) {} 

getMenus(): Observable<Menu[]> { 
    return this.http.get(this.menusUrl) 
     .map(this.extractData) 
     .catch(this.handleError); 
} 

private extractData(res: Response) { 
    let body = res.json(); 

    return body.data || { }; 
} 

private handleError (error: Response | any) { 
    let errMsg: string; 

    if (error instanceof Response) { 
     const body = error.json() || ''; 
     const err = body.error || JSON.stringify(body); 
     errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
    } else { 
     errMsg = error.message ? error.message : error.toString(); 
    } 

    console.error(errMsg); 

    return Observable.throw(errMsg); 
} 
:これは私のmenu.service.tsある

if($control){ 
     $response->data = Menu::get()->toArray(); 
    } 

    if(!$control) { 
     $response->error = 'Error!'; 
    } 

    return json_encode($response); 

そして、

これはです。menu-index.component.ts

errorMessage: string; 
menus: Menu[]; 
mode = 'Observable'; 

constructor(private menusService: MenusService) { } 

ngOnInit() { this.getMenus(); } 

getMenus() { 
    this.menusService.getMenus() 
     .subscribe(
      menus => this.menus = menus, 
      error => this.errorMessage = <any>error); 
} 

Laravelからメニューを取得する部分はうまく動作しますが、エラーメッセージが表示されませんでした。

ヒント:Angular HTTP Clientチュートリアルで示されているものとほぼ同じです。主な問題は、Laravelを使用してエラーを返すと、Angularがエラーをキャッチすることです。

答えて

0

私は適切なエラー応答を返さないことが判明しました。ここでMenuController.phpの修正版では、関連する部分である:

if(!$control) { 
    $response['error'] = 'ERROR!'; 

    return (new Response($response, 400)) 
     ->header('Content-Type', 'application/json'); 
} 
0

は、私は物事の数はあなたが改善することができます参照してください。

  • あなたが手動でデータキャリアをシリアル化する必要はありません。ララベルはあなたのためにそれを処理します。あなたがする必要があるのはreturn $responseです。
  • ハンドルエラーは、エラーメッセージを返す必要があります。連鎖された約束の仕方は、次に呼び出すコールバックが前者からの戻り値を受け取ることです。だから私はそれがreturn errMsgを返すのに十分であるべきだと思います。

これらの改善によって問題が解決されるかどうかはわかりませんが、デバッグプロセスの一歩です。

+0

親愛なる@Leonardは、シリアル化のヒントをありがとうございました。しかし、2番目のヒントは私の問題を解決しませんでした。 – yenerunver

関連する問題