Seb*_*sen 37 typescript angular
现在,我做http请求的方式(借用这个答案)是这样的:
POST(url, data) {
var headers = new Headers(), authtoken = localStorage.getItem('authtoken');
headers.append("Content-Type", 'application/json');
if (authtoken) {
headers.append("Authorization", 'Token ' + authtoken)
}
headers.append("Accept", 'application/json');
var requestoptions = new RequestOptions({
method: RequestMethod.Post,
url: this.apiURL + url,
headers: headers,
body: JSON.stringify(data)
})
return this.http.request(new Request(requestoptions))
.map((res: Response) => {
if (res) {
return { status: res.status, json: res.json() }
}
});
}
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,除非如果返回的状态代码不是200,angular2将失败.例如,如果用户想要发布某些东西而服务器返回400,则角度2将抛出异常:
未捕获的异常:[object Object]
我怎么能避免这个?我想在我的应用中处理这些状态代码,以增强用户体验(显示错误等)
Par*_*ain 60
是的,您可以像这样处理catch操作符并根据需要显示警告,但首先您必须以Rxjs这种方式导入相同的内容
import {Observable} from 'rxjs/Rx';
return this.http.request(new Request(this.requestoptions))
.map((res: Response) => {
if (res) {
if (res.status === 201) {
return [{ status: res.status, json: res }]
}
else if (res.status === 200) {
return [{ status: res.status, json: res }]
}
}
}).catch((error: any) => {
if (error.status === 500) {
return Observable.throw(new Error(error.status));
}
else if (error.status === 400) {
return Observable.throw(new Error(error.status));
}
else if (error.status === 409) {
return Observable.throw(new Error(error.status));
}
else if (error.status === 406) {
return Observable.throw(new Error(error.status));
}
});
}
Run Code Online (Sandbox Code Playgroud)
你也可以在.map函数时通过catch块抛出handel错误(使用错误块),
像这样 -
...
.subscribe(res=>{....}
err => {//handel here});
Run Code Online (Sandbox Code Playgroud)
根据任何状态的要求,如果没有检查特定状态,您可以尝试这样做: -
return this.http.request(new Request(this.requestoptions))
.map((res: Response) => {
if (res) {
if (res.status === 201) {
return [{ status: res.status, json: res }]
}
else if (res.status === 200) {
return [{ status: res.status, json: res }]
}
}
}).catch((error: any) => {
if (error.status < 400 || error.status ===500) {
return Observable.throw(new Error(error.status));
}
})
.subscribe(res => {...},
err => {console.log(err)} );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94118 次 |
| 最近记录: |