この記事では主にTSとAXIOSに基づくインターフェース要求のカプセル化について紹介します。 アイデア傍受を要求する
レスポンスインターセプション
まずルーチン コードを記述します。 axios をインポートします。{ Axiosインスタンス、 アクシオスレスポンス、 Axiosリクエスト構成、 アクシオスエラー } 'axios' より デフォルトの抽象クラス HttpClient をエクスポートします。 保護された読み取り専用インスタンス: AxiosInstance パブリックコンストラクタ(baseURL = '/api'、タイムアウト = 1000 * 120) { this.instance = axios.create({ ベースURL、 タイムアウト }) // 1. リクエストインターセプター this._initializeRequestInterceptor() // 2. レスポンスインターセプター this._initializeResponseInterceptor() } プライベート_initializeRequestInterceptor = () => { this.instance.interceptors.request.use( this._handleRequest、 this._handleError ) } プライベート _handleRequest = (設定: AxiosRequestConfig) => {} プライベート_initializeResponseInterceptor = () => { this.instance.interceptors.response.use( this._handleResponse、 this._handleError ) } プライベート _handleResponse = (レスポンス: AxiosResponse) => {} 保護された _handleError = (エラー: AxiosError) => Promise.reject(エラー) } 上記のコードについて簡単に説明すると、リクエストインターフェース用の HttpClient クラスを作成し、コンストラクタで baseURL と timeout を定義し、リクエストインターセプトメソッドとレスポンスインターセプトメソッドを定義しました。 この時点で、インターフェースを開始するプロセスは次のようになります。
傍受を要求する詳細なロジックから始めましょう。傍受を要求するときは、次の操作を実行できます。
プライベート _handleRequest = (設定: AxiosRequestConfig) => { //1. カスタムリクエストヘッダーを追加する config.headers['Authorization'] = 'my token' config.headers['mobile'] = '私のモバイル' //2. ログインするかどうかを判定する(トークンがあるかどうかを判定) //3. データ形式を変換する config.data = qs.stringify(config.data) 設定を返す } レスポンスインターセプション応答を取得した後のプロセスは次のようになります。
// レスポンスインターセプター private _handleResponse = (response: AxiosResponse) => { const { データ、ヘッダー } = レスポンス //1.--レスポンストークンを処理して保存する const トークン = ヘッダー['authorization'] if (トークン) { this._saveToken(トークン) } //2. -- 応答コードを処理し、ここで try-catch を実行します。バックエンド インターフェースがコードを返さない場合は、直接 try { に戻ります。 定数コード = データ.コード、 メッセージ = data.desc || data.msg const isSucceed = this._handleResCode(コード、メッセージ、URL) if (isSucceed) { Promise.resolve(data) を返します。 } それ以外 { Promise.reject(メッセージ) を返します。 } } キャッチ(エラー){ Promise.resolve(data) を返します。 } } //トークンを保存 プライベート_saveToken(トークン: 文字列) { 定数 USER = getModule(UserModule) USER.setToken(トークン) } プライベート_handleResCode(コード: 数値、メッセージ: 文字列、URL: 文字列) { (コード === 0) の場合 { // リクエストが成功した場合は true を返す } そうでない場合 (コード===4000) { // トークンの有効期限が切れたので、ログインインターフェースに戻ります Vue.prototype.$message.error('ID情報の有効期限が切れました。もう一度ログインしてください') router.push({ name: 'ログイン' }) 偽を返す } それ以外 { // それ以外の場合、すべてのプロンプトはメッセージ情報です Vue.prototype.$message.error(message) 偽を返す } } httpClient.tsを使用してリクエストを定義するリクエスト関連のファイルは、次のように@/apiディレクトリに定義することをお勧めします。 httpクライアント ユーザー.ts uti.ts 対応するファイルでリクエストを定義し、
'./HttpClient' から HttpClient をインポートします。 '../types/test' から { AlarmItemType } をインポートします。 '../types/index' から { BaseResType } をインポートします クラス UtilApi は HttpClient を拡張します { //たとえば、バックグラウンドで返されるレスポンス res={code:xxx,data:xxx,token:xxx,desc:xxx} //まず、res.data の型を定義する必要があります。これは get の最初のパラメータで、AlarmItemType です。 //次に、応答全体のタイプを定義する必要があります。これは BaseResType<AlarmItemType> です。 パブリック getAlarmById = (id: 文字列) => this.instance.get<アラームアイテムタイプ、BaseResType<アラームアイテムタイプ>>( `/realtime/alarms/queryByAlarmId/${id}` ) } エクスポート const UTIL_API = 新しい UtilApi() コンポーネント内のインターフェースの要求USER_API など、リクエストを送信するコンポーネントにリクエスト モジュールのキーワードを入力します。TypeScript Importer プラグインがインストールされている場合は、対応するモジュールのインポート プロンプトが表示されます。このとき、Enter キーを押して対応するモジュールをインポートします。 <テンプレート> <section>リクエストデータ:{{alarmData}}</section> </テンプレート> <script lang="ts"> '@/api/utilApi' から {UTIL_API} をインポートします。 'vue-property-decorator' から { Vue, Component } をインポートします。 @成分({ コンポーネント: {} }) デフォルトのクラスTestRequestをエクスポートし、Vueを拡張します。 アラームデータ = {} 非同期getAlarmData() { const res = UTIL_API.getAlarmById('alarmIdc7e9bd47') を待機します (res.code == 0)の場合{ this.$message.success('リクエストは成功しました') this.alarmData = res.data } } マウント() { this.getAlarmData() } } </スクリプト> <style lang="scss" スコープ></style> 要約するTypescript と Axios に基づくインターフェース リクエスト管理に関するこの記事はこれで終わりです。Typescript と Axios のインターフェース リクエストに関する関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: VMware15.5 インストール Ubuntu20.04 グラフィック チュートリアル
>>: Ubuntu 20.04 は Wi-Fi に接続します (2 つの方法)
はじめに: プロジェクトを開発するために、サーバーに MySql データベース サーバーを展開し、ロ...
1. 複数の国境[1]背景: ボックスシャドウ、アウトライン使用シナリオの多様性を考慮すると、複数の...
1: インストールコマンドpip install docker-compose例外情報socket....
目次バイト機能使用環境プロジェクトを構築する構成vite.config.ts tsconfig.js...
Linux システムを使用したことがある友人なら、 catコマンドを使用したことがあるはずです。もち...
目次1. はじめに2. フィルター() 3. マップ() 4. ソート() 5. 減らす() 6. ...
目次1. スタイル属性をバインドして変更するhtml:対応するjs:達成された効果:次に、refを使...
ARGB は、アルファ (透明度) チャネルが追加された RGB カラー モードであり、32 ビット...
1. mysql-5.7.17-winx64.zip をダウンロードします。リンク: https:/...
<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...
1. ディレクトリホワイトリストを設定する:指定されたリクエストパスに制限を設定しないでください。た...
CSS の背景: background:#00ffee; //背景色を設定するbackground-...
目次Vuex とは何ですか? Vuexの5つの特性vuex の State 機能とは何ですか? vu...
メタタグは、HTML言語のヘッド領域にある補助タグです。HTML文書のヘッダーにあるヘッドタグとタイ...
Win10 システムをインストールしていて、k8s クラスターを構築する場合、Win10 に付属する...