当前位置: 首页 > 知识库问答 >
问题:

HTTP侦听器内的模块导入未定义

井宪
2023-03-14

我有一个HTTP拦截器来监视401错误和超时错误。当我在其中导入服务时。这是说服务是未定义的

我的HTTP拦截器

// dependencies
import { Injectable } from '@angular/core';
import { ConnectionBackend, XHRBackend, RequestOptions, Request, RequestOptionsArgs, Response, Http, Headers } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import { environment } from '../../../environments/environment';
import { Router } from '@angular/router';

import { NotificationService } from '@sharedServices/notification/notification.service';

@Injectable()
export class HttpInterceptor extends Http {

  constructor(backend: XHRBackend, defaultOptions: RequestOptions, private _router: Router, private _notify: NotificationService) {
    super(backend, defaultOptions);
  }

  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
    return super.request(url, options)
      .timeout(2000) // set timeout 15s for every request
      .catch((error: Response) => {
        if (error.status === 401 || error.status === 403) {
          console.log('unAuthorized access');
          this._router.navigate(['/login'], { queryParams: { returnUrl: this._router.url } });
        }

        if (error['name'] === 'TimeoutError') {
          console.log(this._notify) // undefined here
        }
        return Observable.throw(error);
      });
  }

  get(url: string, options?: RequestOptionsArgs): Observable<Response> {
    url = this.updateUrl(url);
    return super.get(url, this.getRequestOptionArgs(options));
  }

  post(url: string, body: string, options?: RequestOptionsArgs): Observable<Response> {
    url = this.updateUrl(url);
    return super.post(url, body, this.getRequestOptionArgs(options));
  }

  put(url: string, body: string, options?: RequestOptionsArgs): Observable<Response> {
    url = this.updateUrl(url);
    return super.put(url, body, this.getRequestOptionArgs(options));
  }

  delete(url: string, options?: RequestOptionsArgs): Observable<Response> {
    url = this.updateUrl(url);
    return super.delete(url, this.getRequestOptionArgs(options));
  }

  private updateUrl(req: string) {
    return environment.origin + req;
  }

  private getRequestOptionArgs(options?: RequestOptionsArgs): RequestOptionsArgs {

    const request_headers = {
      'Content-Type': 'application/json',
      'X-Requested-By': 'api-client'
    };

    if (options == null) {
      options = new RequestOptions();
    }
    if (options.headers == null) {
      options.headers = new Headers(request_headers);
    }

    return options;
  }
}

我的HTTP拦截器工厂

// dependencies
import { XHRBackend, Http, RequestOptions } from '@angular/http';
import { HttpInterceptor } from './http-interceptor';
import { Router } from '@angular/router';

// shared services
import { NotificationService } from '@sharedServices/notification/notification.service';

export function HttpFactory(xhrBackend: XHRBackend, requestOptions: RequestOptions, _router: Router, _notify: NotificationService): Http {
  return new HttpInterceptor(xhrBackend, requestOptions, _router, _notify);
}

捕获块内的通知未定义。我不明白为什么会发生这种情况。

我对这件事很陌生。我做错了什么?

共有1个答案

朱建弼
2023-03-14

你做过:-

'deps':[NotificationService]

在模块中,例如:-

{
 'provide' : Http,
 'useFactory' : HttpFactory,
 'deps' : [NotificationService]

}
 类似资料:
  • 问题内容: 每当用户在其android设备上插入错误的锁定模式时,我都试图找到一种接收消息的方法。老实说,我对如何实现这一目标一无所知,但我想我应该在注册为侦听器的后台提供某种服务。但是我应该在哪个广播员上注册我的收听者? 很抱歉,我没有合适的术语,可能我的文字没有多大意义……但是基本上,我需要构建一个小类,每当插入错误的锁定模式时,该类就执行一个动作。 我并不需要完整的代码,我只需要一个小例子t

  • MyAlertDialog在尝试将上下文设置为侦听器时抛出ClassCastException。我正在从片段调用MyAlertDailog。 我正在使用在android开发文档中找到的指南。 https://developer.android.com/guide/topics/ui/dialogs#PassingEvents 我的片段 MyAlertDialog 错误报告

  • 问题内容: 导入glib失败,原因: 我怎样才能解决这个问题? Python版本是Python 2.7.3rc2。操作系统是Debian。 问题答案: 该模块是针对使用UCS-4作为其内部表示形式构建的Python构建的。您的Python是使用UCS-2作为内部表示构建的。重建模块,或重建Python。 官方FAQ中提到了此问题。这在python问题8654中进行了深入讨论。

  • 我的代码使用jQuery。我有一个密码输入框,我想要得到输入的密码任何时候。 下面是我的代码: 我确信这是一个正确的代码,因为当我在浏览器的控制台中输入它时,它可以工作,但当我重新加载页面时,它就不工作了 我能做什么?

  • 我试图在更新整数值时激发事件,但失败了。下面是我使用的代码: 我是不是漏掉了什么?

  • 我们定义了一个testng结果侦听器,它帮助我们将testng.xml中定义的每个测试用例的测试结果发送到一个内部工具,如下所示: } 然后我们将这个侦听器集成到其他项目的testng xml文件中,例如: 它按照设计工作:一旦测试套件完成,测试结果将上传到内部工具。 现在我们有一个要求,在一个项目中,testng.xml中的一个测试用例与内部工具中的3个测试用例相关,这意味着对于testng.x