【问题标题】:Anuglar 8: HTTPRequest InterceptorAngular 8:HTTP 请求拦截器
【发布时间】:2019-06-14 18:19:32
【问题描述】:

我没有升级到 Anuglar 8,现在我已经在工作的 HTTP 拦截器出现了问题。使用 Angular 7 完全没有问题。

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if (request.url) {
      if (!request.url.startsWith('/')) {
        request = request.clone({
          url:  baseUrl + request.url
        });
      }
    }

    return next.handle(request).pipe(
      tap(
        ([]: HttpEvent<any>) => {  // <------ failure
          // nothing to do ...
        },
        (error: any) => {
    ....

我收到奇怪的错误:

core.js:7187 ERROR TypeError: undefined is not a function
    at TapSubscriber.next.handle.pipe.logConsole [as _tapNext] (HTTP.Request.Interceptor.ts:55)
    at TapSubscriber._next (tap.js:40)
    at TapSubscriber.next (Subscriber.js:49)
    at Observable._subscribe (http.js:2066)
    at Observable._trySubscribe (Observable.js:42)
    at Observable.subscribe (Observable.js:28)

我认为它的 tap 函数有问题...我尝试了几种方法进行修复,但没有成功。因为它在我寻找修复之前就已经奏效了。

【问题讨论】:

  • 你需要导入tap
  • 否则代码无法编译:-/ 执行时出错。
  • 你能把你的代码分享到https://stackblitz.com
  • @LeO 你能像这样更改代码并尝试吗? return next.handle(request).pipe( tap( event =&gt; console.log(event))

标签: angular angular-http-interceptors angular8


【解决方案1】:

使用 Florian 建议的方法进行调试我发现该事件返回 {type: 0} - 我在 Google 上搜索过 - 带有解决方案。

问题是转换不正确,应该是这样的:

return next.handle(request).pipe(
      tap(
        (response: HttpEvent<any>) => {  
      ....

感谢您的努力

【讨论】:

  • 很高兴你知道了。您使用的是[],它是一个对象数组作为参数名称。代码之前的工作很奇怪!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 2015-02-01
  • 2020-03-14
  • 1970-01-01
相关资源
最近更新 更多