Angular 6-设置HTTP、登录服务、拦截器

Angular 6-设置HTTP、登录服务、拦截器,angular,angular6,Angular,Angular6,我正在尝试设置令牌登录服务、http服务和拦截器(用于设置头),但我遇到了一些问题,因为我以前没有这样做过,而且我相信Angular 6与Angular 5没有什么不同 这是我的登录服务代码: 从'@angular/core'导入{Injectable,Injector}; 从“./models/user.model”导入{LoginModel,UserModel}; 从'@angular/Http'导入{Http,RequestOptions,Headers,Response}; 从'@ang

我正在尝试设置令牌登录服务、http服务和拦截器(用于设置头),但我遇到了一些问题,因为我以前没有这样做过,而且我相信Angular 6与Angular 5没有什么不同

这是我的登录服务代码:

从'@angular/core'导入{Injectable,Injector};
从“./models/user.model”导入{LoginModel,UserModel};
从'@angular/Http'导入{Http,RequestOptions,Headers,Response};
从'@angular/Router'导入{Router};
从'rxjs/operators'导入{map,filter,switchMap};
从“../../../environments/environment”导入{environment};
@可注射()
导出类登录服务{
公共令牌:字符串;
private userLoginURL=environment.apirl+'/auth/epvlogin';
构造函数(专用http:http,专用注入器:注入器){
const token=JSON.parse(localStorage.getItem('token');
this.token=token&&token.token;
}
getToken():字符串{
返回localStorage.getItem('Token');
}
setToken(标记:字符串):无效{
setItem('Token',Token);
}
静态getUser():UserModel{
const object=JSON.parse(sessionStorage.getItem('User');
返回object.user;
}
handleError(错误){
const router=this.injector.get(路由器);
if(error.rejection.status==401 | | error.rejection.status==403){
router.navigate(['/登录']);
}
投掷误差;
}
未经验证(){
const promise=新的承诺(
(解决、拒绝)=>{
解析(this.getToken());
}
);
回报承诺;
}
登录(用户:LoginModel){
返回this.http.post(this.userLoginURL,user)
.pipe(映射)(响应:响应)=>{
const token=response.json()&&response.json().token;
如果(令牌){
this.token=token;
setItem('Token',JSON.stringify({Token:Token}));
setItem('User',JSON.stringify({User:response.JSON()}));
//setItem('Token',JSON.stringify({Token:Token}));
//setItem('User',JSON.stringify({User:response.JSON().User}));
返回响应;
}否则{
返回false;
}
}));
}
}
然后是HTTP请求服务:

从'@angular/core'导入{Injectable};
从“rxjs”导入{observeable};
导入'rxjs/add/operator/map';
导入“rxjs/add/observable/throw”;
导入“rxjs/add/operator/toPromise”;
从'@angular/Router'导入{Router};
从'@angular/common/http'导入{HttpClient,HttpErrorResponse,HttpHandler,HttpHeaders};
导入“rxjs/add/operator/catch”;
从“rxjs/operators”导入{catchError,map};
@可注射()
导出类HttpRequestService{
构造函数(专用http:HttpClient,专用路由器:路由器){
}
handleError(错误:任意){
if(error.status&&error.status==401){
this.router.navigate(['/登录']);
返回;
}
让我们看看:任何;
errMsg=error.error.message?error.error.message:error.toString();
如果(errMsg==“用户不存在!”){
this.router.navigate(['/登录']);
返回;
}
console.log(errMsg);
返回可观察抛出(errMsg);
}
获取(url:string){
const result=this.http.get(url)
.pipe(映射)(响应:响应)=>{
返回响应;
}),
catchError((响应)=>this.handleError(响应))
);
返回结果;
}
post(url:string,请求:any){
const result=this.http.post(url,请求)
.pipe(映射)(响应:响应)=>{
返回响应;
}),
catchError((响应)=>this.handleError(响应))
)
返回结果;
}
删除(url:string){
const result=this.http.delete(url)
.pipe(映射)(响应:响应)=>{
如果(响应==null){
返回null;
}
返回响应;
}),
catchError((响应)=>this.handleError(响应)))
返回结果;
}
put(url:字符串,请求:任意){
const result=this.http.put(url,请求)
.pipe(映射)(响应:响应)=>{
返回响应;
}),
catchError((响应)=>this.handleError(响应)))
返回结果;
}
postMultipart(url:字符串,数据:任意,文件:文件[]){
const formData:formData=new formData();
append('data',JSON.stringify(data));
for(文件的常量文件){
formData.append(file.name,file);
}
const result=this.http.post(url,formData)
.pipe(映射)(响应:响应)=>{
返回响应;
// }
}),
catchError((响应)=>this.handleError(响应))
);
返回结果;
}
}
我得到了多个错误,然后,不知道为什么。我在应用程序模块中将所有服务添加到提供商。以下是我遇到的错误:


RxJS 6有一些不同的对象

例如
Http
现在是
HttpClient

Catch
现在是
CatchError

您需要阅读RxJS 6迁移规范