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

标签 http angular observable

这是关于在 angular2 中处理服务器响应
据我了解,
1.服务器响应码200、201等会成功响应
2. 当服务器响应400, 401, 500等会报错
3. 如果响应成功,那么它将转到映射函数,从那里我们可以返回数据或修改它。 4. 如果响应是错误的,那么它将转到 catch 函数,从那里我们可以返回 observable 或抛出 observable。

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

假设我正在从服务器发送以下数据
成功响应
状态:200
msg: "登录成功"

错误响应
状态:400
msg: "用户名和密码错误"

在这里我能够获取或处理成功数据但不能处理错误数据,因为在 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 放在 map 和 catch 函数中。
下面是更新的代码

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

关于http - 使用 HTTP observable 处理服务器错误响应以及 Angular 2 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39593508/

相关文章:

javascript - 等待 Observable 完成以提交表单

无效数据和数据冲突的 HTTP 响应代码

java - 多部分请求/响应 java

http - 我如何 http.ListenAndServe "/"而不是让它响应每条路径?

mongodb - Sinatra + MongoDB 导致 unRESTful API?

javascript - 呈现动态输入数组

javascript - 为什么 ngModel 不触发 writevalue 方法中的变化检测?

angular - 从组件订阅服务中的 Observable

angular-fontawesome + FaIconLibrary + Angular + Storybook.js = :(

javascript - RxJS mixLatest 仅向一个可观察对象添加计时器