gpt4 book ai didi

typescript - 如何处理 Angular 2 中 200 以外的 http 状态代码

转载 作者:太空狗 更新时间:2023-10-29 16:48:25 26 4
gpt4 key购买 nike

现在我做 http 请求的方式(借自 this answer )是这样的:

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

这工作正常,除了如果返回的状态代码不是 200 的话 angular2 将失败。例如,如果用户想要发布一些东西并且服务器返回 400,angular2 将抛出异常:

uncaught exception: [object Object]

我怎样才能避免这种情况?我想在我的应用程序中处理这些状态代码以增强用户体验(显示错误等)

最佳答案

是的,你可以像这样处理 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));
}
});
}

您还可以处理 .map 函数时由 catch block 抛出的错误(使用 err block ),

像这样——

...
.subscribe(res=>{....}
err => {//handel here});

更新

根据任何状态的要求,无需检查特定状态,您可以尝试这样做:-

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

关于typescript - 如何处理 Angular 2 中 200 以外的 http 状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37052617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com