如何使用拦截修改响应?
How to modify response using Interception?
我在Angular中使用了以下拦截:
return next.handle(request).pipe(
map((event: any) => {
if (event.body.data) {
return event.body.data;
}
}));
我的 JSON 响应包含数据 属性。所以我尝试return它:return event.body.data;
.
我的服务是:
public get(): Observable<any> {
return this.http.get(environment.serverUrl + 'events');
}
使用服务:
this.serviceEbents.get().subscribe(response => {
console.log(response);
});
问题是:
ERROR TypeError: Cannot read property 'data' of undefined
at MapSubscriber.project (RequestInterception.ts:43)
at MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber._next
因此我没有得到 console.log(response);
。
HttpClient 已经 returns 只是响应的主体,如果你想收到完整的响应,因此需要使用 response.body
获取主体,那么你需要 'observe the response' 描述这里 https://angular.io/guide/http#reading-the-full-response
你的服务看起来像
public get(): Observable<any> {
return this.http.get(environment.serverUrl + 'events', { observe: 'response' });
}
否则直接说return event
您还应该 console.log event
来调试这个问题。
我在Angular中使用了以下拦截:
return next.handle(request).pipe(
map((event: any) => {
if (event.body.data) {
return event.body.data;
}
}));
我的 JSON 响应包含数据 属性。所以我尝试return它:return event.body.data;
.
我的服务是:
public get(): Observable<any> {
return this.http.get(environment.serverUrl + 'events');
}
使用服务:
this.serviceEbents.get().subscribe(response => {
console.log(response);
});
问题是:
ERROR TypeError: Cannot read property 'data' of undefined
at MapSubscriber.project (RequestInterception.ts:43)
at MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber._next
因此我没有得到 console.log(response);
。
HttpClient 已经 returns 只是响应的主体,如果你想收到完整的响应,因此需要使用 response.body
获取主体,那么你需要 'observe the response' 描述这里 https://angular.io/guide/http#reading-the-full-response
你的服务看起来像
public get(): Observable<any> {
return this.http.get(environment.serverUrl + 'events', { observe: 'response' });
}
否则直接说return event
您还应该 console.log event
来调试这个问题。