angular - Http 拦截器在 Angular 6 中不起作用

标签 angular angular6

我在我的 Angular 6 项目中使用 httpintercept 来处理数据服务中的 401(未经授权)错误。但是 httpintercept 服务没有纳入我的项目。

这是我的intercept.services.ts 文件

export class InterceptService  implements HttpInterceptor {

  constructor(private authService: AuthService) { }

  // intercept request and add token
    intercept(request: HttpRequest<any>, next: HttpHandler):Observable<HttpEvent<any>> {

      // modify request
      request = request.clone({
        setHeaders: {
          Authorization: `Bearer ${JSON.parse(localStorage.getItem('currentUser')).token}`
        }
      });

       console.log("----request----");

     console.log(request);

     console.log("--- end of request---");


      return next.handle(request)
      .pipe(
          tap(event => {
            if (event instanceof HttpResponse) {

              console.log(" all looks good");
              // http response status code
              console.log(event.status);
            }
          }, error => {
           // http response status code
              console.log("----response----");
              console.error("status code:");
              console.error(error.status);
              console.error(error.message);
              console.log("--- end of response---");

          })
        )

    };


}

这是我的常用service.ts页面

 import { Injectable } from '@angular/core';
    import { Observable, Subject } from 'rxjs';
    import {Http, Response,Headers ,RequestOptions } from "@angular/http";
    import { HttpModule} from '@angular/http';
    import { map } from 'rxjs/operators';
    import { Router } from '@angular/router';

     const API_URL   =  '//api path';



    @Injectable({
        providedIn: 'root'
    })
    export class DataService {
        ctrURL:any;
        postData:any;
        ajaxdata:any;

        constructor(private http:Http,private router: Router) { }
        get_data(url,auth=true){
            //......url : url path......
            //....auth : true api auth required,false no api required....
            var get_url = API_URL + url;
            var headers = new Headers();
            headers.append('Content-Type', 'application/json');
            headers.append('Accept', 'application/json');
            if(auth==true){
                var localStore =    JSON.parse(localStorage.getItem('currentUser'));
                headers.append("Authorization", "Bearer " + localStore.token);
            }
            let options = new RequestOptions({ headers });
            return this.http.get(get_url, options) .pipe((map(res => res.json())));
        }


    }

最佳答案

对于 Angular 4.3+ 及更高版本,您必须使用 HttpClient 而不是 Http

拦截器与 HttpClient 一起使用,而不是 Http

因此请使用以下导入:

import { HttpClient, HttpHeaders } from '@angular/common/http';

在构造函数中:

constructor(private http:HttpClient,private router: Router) { }

引用this回答有关 Http 和 HttpClient 的更多信息。

关于angular - Http 拦截器在 Angular 6 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52384927/

相关文章:

基于可用空间的元素的 Angular 2+ : Dynamically set CSS width,

javascript - 如何获取PDF文件的页数?

javascript - Vue <slot/> 的 Angular 等价物是什么?

css - 如何在 Angular Material 6 中为选项卡应用自定义样式?

charts - 如何将 angular-d3-charts 保存到 SVG/JPEG/Excel 中,如 highcharts

angular - 无法将全局 Angular CLI 从 7 升级到 8

angular - HostListener 分析组合按键

angular - Angular 报告进度返回上传文件总数而不是进度

angular - 如何在angular 6库中添加外部js文件

angular5 - 如何捕获从 UI 组件中的效果触发的 ngrx 操作?