繁体   English   中英

使用HTTP observable处理服务器错误响应以及角度2中的数据

[英]handling server error response along with data in angular 2 using HTTP observable

这是关于处理angular2中的服务器响应
我认为,
1.服务器响应代码200,201等将成功响应
2.而服务器响应400,401,500等将产生错误响应
3.如果响应成功,那么它将转到map功能,从那里我们可以返回数据或修改它。 4.如果响应是错误的,那么它将转到catch函数,从那里我们将返回observable或抛出observable。

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

即假设我从服务器发送以下数据
成功的回应
状态:200
消息:“成功登录”

错误回应
状态:400
msg:“用户ID和密码错误”

在这里我能够获取或处理成功数据而不是错误数据,因为在catch函数中,只有错误对象被传递,而错误对象只包含来自服务器的响应代码,而不是响应数据

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

                        })

更新:

不要在地图和捕获功能中放置返回。
下面是更新的代码

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 );
                 })

你没有.catch()它!

如果您的服务器发送了正确的消息,请订阅Observable!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM