この記事では主に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 つの方法)
注意事項1. まず、mysql インストール ディレクトリに次の内容の my.ini ファイルを作成...
目次背景コモンズチャンクプラグイン分割チャンク構成リソースを非同期に読み込む要約する背景高性能なアプ...
序文ブラウザをどのようにズームしても、ボックス コンテナーの高さを常に 100% に保つ必要がある場...
1. 準備1.1 service.bat を含む tomcat 圧縮パッケージをダウンロードします。...
コードをコピーコードは次のとおりです。 html {オーバーフロー: 非表示; }体{オーバーフロー...
目次サーバー計画1. システムコンポーネントをインストールする2. fastdfsをインストールする...
1. まず、TomcatログのエンコーディングとIdeaログ表示コンソールのエンコーディングを区別す...
1. はじめに● ランダム書き込みではヘッドがトラックを頻繁に変更するため、効率が大幅に低下します。...
目次# データ準備後# SQLクエリ率テスト# SQL グループレートテスト# sql ソート率テス...
バックグラウンド コントローラー @RequestMapping("/getPDFStre...
目次DOM処理配列方法要約するDOM処理DOM はドキュメントの構造化された表現を提供し、スクリプト...
この記事の例では、WeChatアプレットマップで使用される具体的な実装コードを参考までに共有していま...
ある日、内部結合を含む SQL ステートメントの実行速度はそれほど遅くはない (0.1 ~ 0.2)...
大きな箱の中に写真があります。マウスをその上に置くと、半透明のマスク レイヤーが表示されます。マウス...
目次マルチアプリケーションの展開1-Tomcat 構成1.1- プロジェクト構成1.2-サービス構成...