这是关于在 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/