处理 204-HTTP Observable 中的无内容响应-Angular2
Handling 204- No Content response in HTTP Observable - Angular2
在我的 Angular2 应用程序中,我从 REST API 获取响应并对其进行操作以便在用户界面中显示它们。
我根据以下教程编写了我的应用程序。
这是我从服务器获取响应的方法
getTendersByCategory(categoryName: string){
console.log("get tenders by category "+categoryName);
let tendersByCategory = this._http
.get(this._endpointUrl + "tender/get-by-category-name/" + categoryName)
.map(mapTenders)
.catch(handleError);
return tendersByCategory;
}
以下函数用于处理响应
function mapTenders(response: Response): Tender[] {
console.log('tender.service.ts -> mapTenders');
/*if(response.status == 204){
console.log("response = 204 - No content in response");
return null;
}*/
return response.json().map(toTender);
}
function toTender(r: any): Tender {
console.log('tender.service.ts -> toTender');
let tender = <Tender>({
id: r.id,
name: r.name,
publisher: r.publisher,
});
return tender;
}
function handleError(error: any) {
console.error(error.message);
return Observable.throw(error.message);
}
现在的问题是,我收到 204 - 我的请求没有内容响应。在那些情况下,我收到错误
Cannot read property 'map' of null
到目前为止,我尝试过的是,我在 mapTenders
函数中检查响应是否为 204;如果是这样,我 return null 没有继续映射到我的对象。 (这部分代码已在给定代码中注释掉)
这是处理此回复的正确方式吗?
但在那种情况下,即使我消除了错误,在我的 .component.ts
文件中我也没有得到空的投标清单。它显示所有投标,没有任何过滤。 (这可能是刷新整个页面的结果,但显然,页面没有重新加载。)
这是我的 component.ts 文件中的方法。
getTendersByCategory(categoryName: string){
this._tendersService.getTendersByCategory(categoryName).
subscribe(
tenders => this._tenders = tenders,
error => this._error_tender = error
);
console.log("tenders.component.ts.getTendersByCategory -> tenders array = "+this._tenders.length);
//for debugging purpose
//this prints all the tenders. What I wished to see is nothing getting printed
for(let i=0; i< this._tenders.length;i++){
printTender(this._tenders[i]);
}
}
我可以在这里做什么?使用可观察对象时我应该如何处理 204 响应?
您可以检查服务调用中的错误响应 itself.Try 下面的代码
MethodName(searchLetter: string, gender: string): Observable<Object[]> {
let dataUrl = 'this._endpointUrl/tender/get-by-category-name/';
let params = new URLSearchParams;
params.append('categoryName', categoryName);
let headers = new Headers();
return this.http.get(dataUrl, { headers: headers, search: params })
.map(response => {
// If request fails, throw an Error that will be caught
if(response.status != 200) {
throw new Error('This request has failed ' + res.status); } // If everything went fine, return the response
else {
return response.json();
} }).catch(this.handleError);
}
在我的 Angular2 应用程序中,我从 REST API 获取响应并对其进行操作以便在用户界面中显示它们。
我根据以下教程编写了我的应用程序。
这是我从服务器获取响应的方法
getTendersByCategory(categoryName: string){
console.log("get tenders by category "+categoryName);
let tendersByCategory = this._http
.get(this._endpointUrl + "tender/get-by-category-name/" + categoryName)
.map(mapTenders)
.catch(handleError);
return tendersByCategory;
}
以下函数用于处理响应
function mapTenders(response: Response): Tender[] {
console.log('tender.service.ts -> mapTenders');
/*if(response.status == 204){
console.log("response = 204 - No content in response");
return null;
}*/
return response.json().map(toTender);
}
function toTender(r: any): Tender {
console.log('tender.service.ts -> toTender');
let tender = <Tender>({
id: r.id,
name: r.name,
publisher: r.publisher,
});
return tender;
}
function handleError(error: any) {
console.error(error.message);
return Observable.throw(error.message);
}
现在的问题是,我收到 204 - 我的请求没有内容响应。在那些情况下,我收到错误
Cannot read property 'map' of null
到目前为止,我尝试过的是,我在 mapTenders
函数中检查响应是否为 204;如果是这样,我 return null 没有继续映射到我的对象。 (这部分代码已在给定代码中注释掉)
这是处理此回复的正确方式吗?
但在那种情况下,即使我消除了错误,在我的 .component.ts
文件中我也没有得到空的投标清单。它显示所有投标,没有任何过滤。 (这可能是刷新整个页面的结果,但显然,页面没有重新加载。)
这是我的 component.ts 文件中的方法。
getTendersByCategory(categoryName: string){
this._tendersService.getTendersByCategory(categoryName).
subscribe(
tenders => this._tenders = tenders,
error => this._error_tender = error
);
console.log("tenders.component.ts.getTendersByCategory -> tenders array = "+this._tenders.length);
//for debugging purpose
//this prints all the tenders. What I wished to see is nothing getting printed
for(let i=0; i< this._tenders.length;i++){
printTender(this._tenders[i]);
}
}
我可以在这里做什么?使用可观察对象时我应该如何处理 204 响应?
您可以检查服务调用中的错误响应 itself.Try 下面的代码
MethodName(searchLetter: string, gender: string): Observable<Object[]> {
let dataUrl = 'this._endpointUrl/tender/get-by-category-name/';
let params = new URLSearchParams;
params.append('categoryName', categoryName);
let headers = new Headers();
return this.http.get(dataUrl, { headers: headers, search: params })
.map(response => {
// If request fails, throw an Error that will be caught
if(response.status != 200) {
throw new Error('This request has failed ' + res.status); } // If everything went fine, return the response
else {
return response.json();
} }).catch(this.handleError);
}