問題タブ [angular-http-interceptors]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
angularjs - Jasmine テストで AngularJS $httpBackend をモックし、デコレータを使用すると、「$httpBackend.when は関数ではありません」エラーが発生する
すべての http 呼び出しの URL を変更するために、Angular サービス $httpBackend のデコレーターを使用しています。
一部の Jasmine テストでは、$httpBackend サービスをモックする必要があります。
これらのテストを実行すると、「$httpBackend.when は関数ではありません」というエラーが表示されます。
これを修正する方法はありますか?アプリの構成にテスト固有のコードを持たないソリューションを希望します。
angularjs - angular HTTPインターセプターで絶対URLを取得するには?
私たちのアプリケーションでは、すべてのリクエストで、フロントエンドが URL とデータをハッシュし、サーバーに送信します。次に、サーバーはクエリ パラメータとデータが改ざんされていないことを確認します。ただし、httpinterceptor では、config.url と config.params しか表示できません。絶対 URL を取得する方法がないため、直接ハッシュすることはできません。どうすればこれを行うことができますか?私はの線に沿って何かを試しました
ただし、この方法でパラメーターにアクセスできないように見えるため、これは機能しません。また、パラメータがリクエスト URL と同じ順序であることを確認するにはどうすればよいですか? 明らかに、1 文字でも異なる場合、ハッシュは正しくありません。
angularjs - angularリクエストビジーインターセプター
アップデート
自分で解決したと思います。以下のソリューションとして投稿したインターセプターを確認してください。
オリジナル
リクエストがどのように行われているかを発信者に知らせることができる http インターセプターを書くことができるかどうか疑問に思っていました。
今、バックエンドを呼び出したいときは、渡すオブジェクトに属性を設定するラッパーで $http 呼び出しをラップします。
この場合、login(authArgs, $scope.loginCtrl)
ログイン ページ コントローラーを呼び出します。次に、ログイン テンプレートでloginCtrl.busy
, loginCtrl.result
&を使用します。loginCtrl.error
バックエンドに対して行うすべての呼び出しで、これらの属性を設定し、リクエストを開始するビューで使用できるようにしたいと考えています。
このようなラッパー関数を使用すると仕事が完了しますが、インターセプターを使用して実行できるかどうか疑問に思っていますか? これにより、すべてのバックエンド呼び出しをサービスで明示的にラップする必要のない、よりクリーンな要求フローが提供されるように感じます。
今、私はhttpInterceptorsを読んで、ユーザー提供のオブジェクトに属性を設定させる方法を見つけることができないようです. 私が見つけた最後のものは、例(タイムスタンプマーカー(リクエストおよび応答インターセプター))を含むこの記事request
で、インターセプターステージとresponse
インターセプターステージの両方で構成オブジェクトに属性を追加します。responseError
ステージまたは発信者コントローラーで。
どんな助けでも大歓迎です:)
angularjs - AngularJS を使用して GET statuses/user_timeline にアクセスしているときに Twitter がエラーを返す
Angularjs を使用して Twitter GET statuses/user_timeline にアクセスしようとしています。私はすでにベアラートークンを持っています。Angularjs を使用してアプリケーションのみの認証を行おうとしています。
エラー コード オプションhttps://api.twitter.com/1.1/statuses/user_timeline.json (匿名関数) @ angular.js:10722sendReq @ angular.js:10515serverRequest @ angular.js:10222processQueue @ angular.js:14745(anonymous関数) @ angular.js:14761Scope.$eval @ angular.js:15989Scope.$digest @ angular.js:15800Scope.$apply @ angular.js:16097bootstrapApply @ angular.js:1660invoke @ angular.js:4478doBootstrap @ angular. js:1658bootstrap @ angular.js:1678angularInit @ angular.js:1572(匿名関数) @ angular.js:28899trigger @ angular.js:3024eventHandler @ angular.js:3298 (インデックス):1 XMLHttpRequest はhttps://apiを読み込めません.twitter.com/1.1/statuses/user_timeline.json . プリフライトの応答に無効な HTTP ステータス コード 400 が含まれています
以下は私が書いたコードです。
メインアプリで
コントローラーで
Twitter からデータを取得できません。助けてください。Chrome用のCORSプラグインも追加しましたが、それでも助けにはなりません。Xampp と nodejs を使用してみましたが、効果がありません。
angularjs - Angular - HTTP インターセプターの再試行を制限する
応答のエラー時に、ステータス コードとアクセス トークンがローカル ストレージに存在する場合、HTTP 要求を再試行するインターセプターを作成しました。
これは主に、使用している API (私には制御できない) からの不可解な応答の失敗に対処するために作成しました。理由もなく API エンドポイントが失敗する場合があるため、API のメンテナンスを制御できないため、HTTP 要求の送信を再試行するだけでよいと考えました。
ただし、これにより、API に実際にエラーがある場合に、インターセプターが無限に再試行することになります。
私が達成しようとしているのは、このインターセプターの再試行に制限を設けることです。カウンターを入れてみましたが、カウンターが次のインターセプター呼び出しに引き継がれないようです。
このような状況に対処するものを探していましたが、役に立ちませんでした。インターセプターの応答エラーの再試行を制限する方法はありますか?
angularjs - AngularJS: コントローラーからアプリ構成にデータを渡す
私はAngularが初めてです。Angular アプリでトークン認証を使用しています。HTTP インターセプターを使用して、バックエンドが 401 を返すタイミングを確認し、更新トークンを使用してログインします。
これで、refresh_token はログイン コントローラー (API バックエンドから取得) から取得されます。したがって、コントローラーはそれを何らかの方法でインターセプターに渡す必要があります。問題は、インターセプターが構成ブロックにあるため、サービスや値などがないことです-プロバイダーのみ。ただし、プロバイダーはコントローラーに注入できません。コントローラーから app.config にデータを渡す方法はありますか? そうでない場合、回避策はありますか?インジェクターは app.config 以外の場所に配置できますか?
angularjs - $http(config); の絶対 URL または相対 URL。
angularでインターセプターをプログラミングしていますが、構成オブジェクト、特にURL属性について質問があります。ドキュメントには「要求されているリソースの絶対または相対URL」があると書かれていますが、実際にはいくつかのメソッドが相対ルートを与えているからです。もう1つは絶対なので、どのようにしてすべてのメソッドに相対ルートを与えることができますか?
構成オブジェクトのドキュメントhttps://docs.angularjs.org/api/ng/service/ $http#usage
angularjs - インターセプターと ng-bind
インターセプターを学んでいます。結果をコンソールに「印刷」していますが、{{}} のように、または ng-bind を使用して画面に表示したいと考えています。やってみましたができませんでした。
誰でも私を助けることができますか?
ありがとう!
javascript - Angularjs 1.4 インターセプターが機能しない
私はAngularの初心者だと言って始めましょう。私の理解不足に基づいて、非常にばかげた間違いを疑っています。
リクエストとレスポンスのエラーを処理するインターセプターを作成しようとしています。
ファイルの先頭にアラートを配置すると、それが呼び出されるため、ファイルがロードされます。ただし、ファイルの下部や構成が呼び出される前を含む他のアラートはありません。responseError と requestError が呼び出されることはありません...
問題を再現する最小限まで単純化してみました。古いコードを使用している場合に備えて、実装方法についていくつかの異なる例を試しました。例外.....私はこれを機能させようとして一日のほとんどをグーグルで検索しましたが、困惑しています。
特に何が起こっているのかをしっかりと理解するための助けをいただければ幸いです
----後世のための回答関連情報----
sbedulins と Angad の回答の組み合わせに基づいて、私はそれを機能させることができました。
最初に、私がそれを機能させたら、responeErrorとRequestErrorを一重引用符で囲んでも付けなくても機能しました...
依存関係 1 と 2 は定義されておらず、簡単な例からカット アンド ペースト エラーが発生しました。だから私はそれらを削除しました。
次に、モジュールを angular.module('defaultApp') に置き換えたので、モジュールは例のプレースホルダーであり、それを格納する便利なグローバルではありません...モジュール (または変数モジュール) を明示的に定義する必要があります (はい、私は本当に角度が初めてです)
これらの変更がすべて sbedulins の例に適用されると、両方のアプローチで動作するコードがここに表示されます。
また
皆様のご協力に感謝いたします。サンプルでAngularの略記について重要なことを学びました。彼/彼女の答えを機能させるにはコメントの助けが必要ですが、sbedulinは答えを得ます
angularjs - 認証トークンの更新中に複数の不正なリクエストを処理する
API 認証に JWT を使用する Angular アプリは、API への呼び出しが返されたときにログイン ダイアログを起動し401 "Unauthorized"
、ユーザーが資格情報を入力して新しい有効な JWT を取得できるようにします。その後、アプリは失敗した無許可の要求を再試行し、フローを維持します。
ここにリストされているコードは、Chris Clarke によるこのソリューションに基づいています。
問題は、期限切れのトークンを使用するリクエストが複数ある場合です。最初に戻ってくるものは、ログイン ダイアログをトリガーし、新しいトークンを取得する必要があります。しかし、新しいトークンが利用可能になるまで他の保留中の要求を待機させるにはどうすればよいでしょうか? 新しいトークンが要求されていることを後続のすべての受信応答に通知するフラグを設定できます。promise を返すことができ、すべての構成オブジェクトを Service の配列に格納できます。新しいトークンが利用可能になると、待機中のすべてのリクエストを再試行できます。しかし、新しいトークンが利用可能になった後に返される無許可のリクエストはどうなるでしょうか? それらは、新しいログイン ダイアログをトリガーします。
追加のメモ:
この回答は関連する問題の解決策を提供しますが、ここには新しいログインが含まれているため、このケースに解決策を適応させる方法がわかりません。
トークンを自動更新するオプションではありません。トークンの有効期限は 8 時間 (作業セッション) で、新しいログインが必須です。
- 構成オブジェクトにサービス (
cslAuth
およびここ)を挿入しても安全ですか?$http
私のコードは機能していますが、現時点では完全に準備ができていないことを読みました。