angular - 为什么拦截器不返回数据给订阅者?

标签 angular angular-http-interceptors angular7

我在最后一个 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

enter image description here

区别在于 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/

相关文章:

javascript - Angular/ typescript : arrays in typescript changing when an independent element got changed

Angular 4 Http 拦截器 : next. handle(...).do 不是函数

Angular - 多个错误拦截器

Angular Material - Chips Autocomplete - 如何显示所需的错误消息和错误突出显示颜色

node.js - 重击 : npm: command not found

java - Angular 7 如何将 Access-Control-Allow-Origin header 添加到预检发布请求中?

angular - 显示每个 http 请求的加载栏 angular2

typescript - Angular 7.x.x 滚动到片段的最简单方法?

google-chrome - E/launcher - 未知错误 : Chrome failed to start: exited abnormally, Protractor

angular - Dockerize angular-cli 4 项目在尝试运行 "ng build --aot --prod"时失败