[解決済み] Angularアプリケーションに複数のHTTPインターセプターを追加する
2023-01-22 22:06:39
質問
Angular 4 アプリケーションに複数の独立した HTTP インターセプターを追加するにはどうしたらよいでしょうか。
を拡張して追加しようとしたのですが
providers
配列に複数のインターセプターを追加してみました。しかし、実際に実行されるのは最後の1つだけです。
Interceptor1
は無視されます。
@NgModule({
declarations: [ /* ... */ ],
imports: [ /* ... */ HttpModule ],
providers: [
{
provide: Http,
useFactory: (xhrBackend: XHRBackend, requestOptions: RequestOptions) =>
new Interceptor1(xhrBackend, requestOptions),
deps: [XHRBackend, RequestOptions],
},
{
provide: Http,
useFactory: (xhrBackend: XHRBackend, requestOptions: RequestOptions) =>
new Interceptor2(xhrBackend, requestOptions),
deps: [XHRBackend, RequestOptions]
},
],
bootstrap: [AppComponent]
})
export class AppModule {}
これらを組み合わせて、明らかに一つの
Interceptor
クラスにまとめることができます。しかし、これらのインターセプターは完全に異なる目的(1つはエラー処理のため、1つはロードインジケータを表示するため)を持っているので、私はそれを避けたいと考えています。
では、どうすれば複数のインターセプターを追加できるのでしょうか?
どのように解決するのでしょうか?
Http
は複数のカスタム実装を持つことを許可していません。しかし、@estus が言及したように、Angular チームは新しい
HttpClient
サービスが追加され、複数のインターセプターのコンセプトがサポートされました。を拡張する必要はありません。
HttpClient
を拡張する必要はありません。
Http
. の実装を提供することができます。
HTTP_INTERCEPTORS
これは
'multi: true'
オプションで配列にすることができます。
import {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';
...
@NgModule({
...
imports: [
... ,
HttpClientModule
],
providers: [
... ,
{
provide: HTTP_INTERCEPTORS,
useClass: InterceptorOne,
multi: true,
},
{
provide: HTTP_INTERCEPTORS,
useClass: InterceptorTwo,
multi: true,
}
],
...
})
インターセプターです。
import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';
...
@Injectable()
export class InterceptorOne implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log('InterceptorOne is working');
return next.handle(req);
}
}
@Injectable()
export class InterceptorTwo implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log('InterceptorTwo is working');
return next.handle(req);
}
}
このサーバーの呼び出しは、両方のインターセプターのログメッセージを表示します。
import {HttpClient} from '@angular/common/http';
...
@Component({ ... })
export class SomeComponent implements OnInit {
constructor(private http: HttpClient) {}
ngOnInit(): void {
this.http.get('http://some_url').subscribe();
}
}
関連
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] updateとdeleteのHTTPステータスコード?
-
[解決済み] カスタムHTTPヘッダー:命名規則
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み] application/x-www-form-urlencoded or multipart/form-data?
-
[解決済み] 簡単なパイプで小数点以下2桁に制限する
-
[解決済み] Angular2のテーブル行をコンポーネント化
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angular 4/5/6 グローバル変数
-
[解決済み] タイプスクリプト タイプ X はタイプ Y の length、pop、push、concat、その他 26 のプロパティが欠落しています。[2740]
-
[解決済み] Angular v5からAngular v6にプロジェクトをアップグレードしたい。
-
[解決済み] 遅延のあるobservableを作成するには?
-
[解決済み] Angular2 DIRECTIVEは要素の既知のプロパティではないので、バインドできません。
-
[解決済み] AngularでFormGroupに動的にaddControlを追加する
-
[解決済み] angularで「タイプ 'EventEmitter' は一般的ではありません」ERROR。
-
[解決済み] 64進数の文字列を角(2+)でエンコードおよびデコードする。
-
[解決済み] Angular : ルートへの手動リダイレクト
-
[解決済み] Angularのビルドと実行方法