2017-03-01 94 views
0

如何在Angular2中使用ng2-resource-rest和typeScript处理类似400/500状态的休息调用错误?Angular2:ng2-resource-rest响应错误处理

register.component.ts

registerEmployees() { 
    let regEmployee = this.empService.employeeRegister(this.register); 
    regEmployee.$observable 
     .subscribe(
     (data: any) = > { 
     regEmployee = data; 
    } 
    ), 
     (error: any) = > { 
     // I also made a layer to parse errors 
    }; 
} 

employee.service.ts

import{ Injectable } from '@angular/core'; 
import{ RequestMethod, Response } from '@angular/http'; 

import{ ResourceAction, ResourceMethod, ResourceParams } from 'ng2-resource-rest'; 
import{ RestClient } from './global/rest-client'; 

@Injectable() 
@ResourceParams({ 
url: 'http://localhost:8080/api/v1' 
}) 
export class EmployeeServiceService extends RestClient { 

    @ResourceAction({ 
    method: RequestMethod.Post, 
     path : '/employee' 
    }) 
    employeeRegister: ResourceMethod<any, any>; 

} 

回答

0

试试这个。

http 
    .get('Some Url') 
    .map(res => { 
    // If request fails, throw an Error that will be caught 
    if(res.status < 200 || res.status >= 300) { 
    throw new Error('This request has failed ' + res.status); 
    } 
    // If everything went fine, return the response 
    else { 
    return res.json(); 
    } 
}) 
.subscribe(
    (data: any) => { 
      regEmployee = data; 
    } 
) 
+0

例外在if子句 –

+0

之前抛出什么异常!? –

0

其实你有Response对象为error,你可以用它来处理错误

registerEmployees() { 
    let regEmployee = this.empService.employeeRegister(this.register); 
    regEmployee.$observable 
     .subscribe(
      (data: any) = > { 
      // it's not need to set data, data is already set to the object 
      //regEmployee = data; 
      }, 
      (error: Response) => { 
      // I also made a layer to parse errors 
      if (error.status === 400) { 
       console.log('My error JSON', error.json()); 
       console.log('My error TEXT', error.text()); 
      } 

      } 
     ); 
} 

PS:我已经发布了新的版本,并且也更名为NGX资源