2016-09-20 102 views
5

这是关于在an​​gular2
据我所知处理服务器响应沿服务器错误响应,
1.服务器响应码200,201等会使成功响应
2.而服务器响应400,401,500等将做出错误响应
3.如果响应成功,那么它将转到map函数,从那里我们可以返回数据或修改它。 4.如果响应是错误的,那么它会去捕捉函数,从那里我们可以返回observable或抛出observable。处理与使用HTTP观察到在角2数据

我的问题是如果服务器返回错误响应代码以及错误数据,那么如何捕获该数据。

即假如我是从服务器发送以下数据
成功响应
状态:200
消息: “成功的loggedIn”

错误响应
状态:400
消息: “用户名和密码错误”

这里我是一个BLE获取或处理成功的数据,但不是错误的数据,因为在捕捉功能,唯一的错误对象获得通过,并且错误对象只包含来自服务器的响应代码,而不是响应数据

return this.http.get('/login') 
         .map((res: Response) => res.json().data) 
         .catch((error: any) => { 
          return Observable.throw(new Error("error occured"+error.status)); 

         }) 

回答

4

更新:

不要把地图和捕捉功能放回去。
下面是更新后的代码

return this.http.get('/login') 
       .map((successRes: Response) => { 
         res.json().data 
        )} 
       .catch((errorRes: Response) => { 
        Observable.throw(errorRes.json().data); 
       }) 


原文:

其实解决办法很简单,响应数据本身附加到第一个参数,它在成功的情况下,就像正常的反应响应。

只需将json()调用添加到响应错误对象以将json转换为js对象,如下所示。

return this.http.get('/login') 
       .map((successRes: Response) => { 
         return res.json().data 
        )} 
       .catch((errorRes: Response) => { 
        return Observable.throw(errorRes.json().data); 
       }) 
+1

遗憾的是没有“这样的事情” - 'errorRes.json()' - 错误响应 –

2

您不必.catch()它!

如果您的服务器发送正确的消息,只需订阅该Observable!

yourLoginService.LogInFunction().subscribe(
    successData => console.log(successData), 
    errData => console.log(errData) 
); 
+0

其实我已经在2 place..1st从组件类打电话到服务,从服务class..2nd类http.this适用于第一种情况下的情况下,即时通讯使用与我在服务方法调用中提到的相同的方式..但在http方法调用我不得不使用地图和捕捉方法... – Vikash

+0

当然,你可以对它在你的服务中也是如此。然后请澄清你的问题。 :) – mxii