gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:45:01 24 4
gpt4 key购买 nike

我在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com