Typescript Angular 5拦截器:TypeError:next.handle(…).do不是函数

Typescript Angular 5拦截器:TypeError:next.handle(…).do不是函数,typescript,angular5,angular-http-interceptors,Typescript,Angular5,Angular Http Interceptors,我创建了一个角度拦截器来检查我的身份验证令牌的有效性。不知何故,do方法无法被angular识别subscribe有效,但我不希望使用该解决方案,因为它会将发送到服务器的请求增加一倍 TypeError: next.handle(...).do is not a function at AuthTokenService.webpackJsonp.../../../../../src/app/commons/services/interceptors/auth-token.service.ts.A

我创建了一个角度拦截器来检查我的身份验证令牌的有效性。不知何故,
do
方法无法被angular识别
subscribe
有效,但我不希望使用该解决方案,因为它会将发送到服务器的请求增加一倍

TypeError: next.handle(...).do is not a function
at AuthTokenService.webpackJsonp.../../../../../src/app/commons/services/interceptors/auth-token.service.ts.AuthTokenService.intercept (auth-token.service.ts:37)
at HttpInterceptorHandler.webpackJsonp.../../../common/esm5/http.js.HttpInterceptorHandler.handle (http.js:1796)
at XsrfService.webpackJsonp.../../../../../src/app/commons/services/interceptors/xsrf.service.ts.XsrfService.intercept (xsrf.service.ts:15)
at HttpInterceptorHandler.webpackJsonp.../../../common/esm5/http.js.HttpInterceptorHandler.handle (http.js:1796)
at HttpXsrfInterceptor.webpackJsonp.../../../common/esm5/http.js.HttpXsrfInterceptor.intercept (http.js:2489)
at HttpInterceptorHandler.webpackJsonp.../../../common/esm5/http.js.HttpInterceptorHandler.handle (http.js:1796)
at MergeMapSubscriber.project (http.js:1466)
at MergeMapSubscriber.webpackJsonp.../../../../rxjs/_esm5/operators/mergeMap.js.MergeMapSubscriber._tryNext (mergeMap.js:128)
at MergeMapSubscriber.webpackJsonp.../../../../rxjs/_esm5/operators/mergeMap.js.MergeMapSubscriber._next (mergeMap.js:118)
at MergeMapSubscriber.webpackJsonp.../../../../rxjs/_esm5/Subscriber.js.Subscriber.next (Subscriber.js:92)
这是我的拦截程序代码:

从'@angular/core'导入{Injectable,NgModule};
从“rxjs/Observable”导入{Observable};
从导入{HttpEvent,HttpInterceptor,HttpHandler,HttpRequest}
“@angular/common/http”;
从“app/commons/services/auth/session.service”导入{SessionService};
从“@angular/common/http”导入{HttpErrorResponse};
从'@uirouter/angular'导入{StateService};
导入'rxjs/add/operator/do';
从“lodash”中导入*as uu;
@可注射()
导出类AuthTokenService实现HttpInterceptor{
建造师(
专用会话服务:会话服务,
私有状态服务:状态服务
) {}

intercept(req:HttpRequest

在这里发现了我的错误。在angular 5中,操作符被更改为
lettable操作符
。我还不太了解它们的功能,因为我对使用这项技术还不太熟悉。但是在几个小时的时间里,我对angular 4文档和关于拦截器工作原理的答案感到非常沮丧,最后我看到了这篇文章:

我的更新代码:

从'rxjs/operators'导入{map,filter,tap};
@可注射()
导出类AuthTokenService实现HttpInterceptor{
截取(req:HttpRequest,next:HttpHandler):可观察{
const start=Date.now();
返回next.handle(dupReq).pipe(
点击(事件=>{
if(HttpResponse的事件实例){
const appeased=Date.now()-已启动;
log(`Request for${req.urlWithParams}花费了${appeased}ms.`);
}
},错误=>{
console.error('NICE error',error)
})
)
}
}

从我的http请求中捕获错误,就像一个符咒。

你从哪里初始化变量开始?@henocsalinas我已经记不清我是如何编写这段代码的了,但我可能会在
next.handle(dupReq.pipe)行之前编写它(
haha!我会编辑答案。谢谢,这对我有用,我把变量放在下一行之前。handle