我在最后一个 Angular 中使用了拦截器:
return next.handle(request).pipe(
map((event: any) => {
if (request.method == "GET") {
return event;
}
if (request.method == "POST") {
if (event.body) {
return event.body["result"];
}
}
return event;
}));
因此,我检查是否是 POST
请求,我希望从 JSON 中获取带有关键 result
的数据。
我还尝试在观察者中返回数据:
if (event.body) {
return Observable.of(event.body["result"]);
}
订阅是:
this.method.subscribe(res => {
console.log(res);
});
看这张照片:
console.log(event); // This is default event - first selected area
console.log(eventToSend); /./ This is modified - second selected area
区别在于 HttpResponse 类型,它缺少第二个修改对象 eventToSend
最佳答案
由于您的拦截器需要返回完整的 event
(类型 Observable<HttpEvent<any>>
)而不仅仅是响应 body
,但你仍然想得到 result
在响应中body
,试试这个:
return next.handle(request).pipe(
map((event: any) => {
// Removing this as it is redundant
/*if (request.method == "GET") {
return event;
}*/
if (request.method == "POST") {
if (event.body) {
const eventToSend = { ...event };
eventToSend.body = event.body["result"];
return eventToSend;
}
}
return event;
}));
在这里,我们正在传播整个event
对象,然后重新分配 body
其上的属性(property)为 body['result']
这是一个Sample StackBlitz供您引用。
关于angular - 为什么拦截器不返回数据给订阅者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53241256/