序文勉強やプロジェクトをやっていると、axiosによく遭遇します。以前やったプロジェクトではaxiosを設定していたので、大まかな印象はありました。最近、axiosを手動で設定する機会があったので、ついでに録画して共有します〜 axiosカプセル化の利点axios カプセル化の利点は、処理の統一、効率性の向上、メンテナンスの容易さです。 axiosリクエストインターフェースは次のように使用できます。 axios.get('http://localhost:10086/user?ID=12345') .then(応答 => { // 成功後の操作... }) .catch(エラー => { // 失敗後の操作... }); ただし、インターフェース要求や要件が増えると、プロジェクト内でインターフェース要求が必要なすべての場所にこのようなコードを記述すると、多くの反復コードが生成され、開発効率が低下し、メンテナンス コストが増加します。 パッケージのアイデアプロジェクトのほとんどのシナリオに構成が適応できるように、axios を一度構成する必要があります。新しい js ファイルを作成し、カスタム構成で新しい axios インスタンスを作成し、インスタンスで基本構成を実行し、リクエスト前の段階 (リクエスト本体の処理) とリクエスト後の段階 (戻り結果の処理) で必要な処理を追加して、使用するためにエクスポートすることができます。 設定の優先順位構成は優先順位に従ってマージされます。順序は、 lib/defaults.js にあるライブラリのデフォルト、インスタンスの defaults プロパティ、最後にリクエストの config パラメータです。 (このように、特別なシーンを別途処理することもできます) node_modules フォルダー内の axios ライブラリ ファイルの下にある lib/defaults.js。 カスタムインスタンスのデフォルト 定数インスタンス = axios.create({ ベースURL: 'https://api.example.com' }); 要求された設定パラメータ アクシオス({ メソッド:'get', url:'http://bit.ly/2mTM3nY', レスポンスタイプ: 'stream' }).then(function(response) { response.data.pipe(fs.createWriteStream('ada_lovelace.jpg')) }); axiosインスタンス構成1. 一般的な設定を定義するBaseUrlの設定
'axios' から axios をインポートします エクスポート const request = createAxiosInstance() 関数createAxiosInstance() { 定数インスタンス = axios.create({ ベースURL: process.env.REACT_APP_BASE_URL、 タイムアウト: 5000、 ヘッダー: { // 統合リクエストヘッダーポストを定義できます: { 'コンテンツタイプ': 'application/json' } ... } }) インスタンスを返す } 2. リクエストの前に必要な操作をいくつか追加します。たとえば、リクエストヘッダーにトークンを追加する必要があります リクエストパラメータが空の処理
インターフェースが要求されるたびにアニメーション効果の読み込みを有効にするなど。 // リクエストインターセプターを追加する(リクエストを送信する前に何かを行う) インスタンス.インターセプター.リクエスト.使用((config) => { //読み込みエフェクトを開く関数を追加できます。loading.open() //トークンが存在する場合は、それをリクエスト ヘッダー トークンに追加します && (config.headers.Authorization = token) // リクエストパラメータ内の null undefined '' 関数をフィルター cleanObject() 設定を返す }) 3. リクエストが返されたら、インターセプト操作を追加します。
たとえば、バックエンドから返されるデータは、多くのレイヤーにネストされている場合があります。必要なデータを直接返すことができるため、ビジネス コードは毎回データを分解することなく、最終データを直接取得できます。
インターフェース要求は成功する場合と失敗する場合があります。インターフェース要求を記述するたびに失敗ロジック コードを記述したくない場合、また、ほとんど常に繰り返される場合は、ここでインターフェースの統一された例外処理を集中的に実行できます。たとえば、ステータス コードまたはバックエンドのカスタマイズされたコードを判別し、バックエンドから返されたエラー プロンプトを表示します。 // レスポンスインターセプターを追加する(レスポンスデータで何かを行う) インスタンス.インターセプター.レスポンス.use((レスポンス) => { //読み込みエフェクトを閉じる関数を追加できます。loading.close() //返された結果データを分解する const res = response.data //カスタムコードを判断し、成功したデータを返します const validateStatus = /^(2|3)\d{2}$/ //2または3で始まるコードは成功したリクエストとみなされます if (validateStatus.test(res.code)) { return res // 必要なデータを直接返す } //失敗したコードを判断し、プロンプトなどを表示します。if (res.code === 401) { メッセージ.エラー(res.msg) } それ以外 { メッセージ.警告(res.msg) } Promise.reject(res) を返す }, (エラー) => { 読み込み中.閉じる() エラー応答ステータスが401の場合 message.error('トークンの有効期限が切れています。もう一度ログインしてください!') ストレージトークンを削除します。 タイムアウトを設定する(() => { window.location.href = '/ログイン' }, 2000) } それ以外 { (!window.navigator.onLine)の場合{ message.warning('ネットワーク異常です。ネットワークが正常に接続されているか確認してください') } そうでない場合 (error.code === 'ECONNABORTED') { message.warning('リクエストタイムアウト') } それ以外 { message.warning('サーバー異常です。管理者に連絡してください') } } return Promise.reject(error) // 特定のページにエラーを返す} ) HTTP ステータス コードとカスタム コードに基づいたエラー処理がいくつかあります。ここでエラーがインターセプトされると、ページがビジネス インターフェイスを呼び出すたびにエラー プロンプト処理を実行する必要がなくなります。もちろん、さまざまなプロジェクトのニーズに応じて構成する必要があります。 リクエストインターフェースメソッドの統合管理一般的に、統一された管理のためにすべてのインターフェース要求メソッドをまとめて記述します。これにより、後で変更が加えられたときに検索とメンテナンスも容易になります。 API リクエスト (apiList など) を管理するための新しいフォルダーを作成し、そこにさまざまなリクエスト ファイル (ここでは機能ごとに分割) を配置できます。たとえば、user.js にはユーザー関連のリクエストなどが保存されます。その後、ページはメソッドを直接参照してインターフェース呼び出しを行うことができます。 '../axios' から { request } をインポートします // ユーザー情報を取得するエクスポート関数 getUserInfo (userId) { request.get(`/sys/user/info/${userId}`) を返します } コンポーネントまたはページ内でメソッドを直接呼び出すだけです〜 最後に、完全な例を示します。参考にしてくださいね〜この例の設定は、vue または react に適しています。もちろん、各プロジェクトの設定は若干異なります。自分のプロジェクトに合わせて変更、拡張してください。 'axios' から axios をインポートします エクスポート const request = createAxiosInstance() 関数createAxiosInstance() { 定数インスタンス = axios.create({ ベースURL: process.env.REACT_APP_BASE_URL、 タイムアウト: 5000、 ヘッダー: { // 統合リクエストヘッダーポストを定義できます: { 'コンテンツタイプ': 'application/json' } ... } }) // リクエストインターセプターを追加する(リクエストを送信する前に何かを行う) インスタンス.インターセプター.リクエスト.使用((config) => { //読み込みエフェクトを開く関数を追加できます。loading.open() //トークンが存在する場合は、それをリクエスト ヘッダー トークンに追加します && (config.headers.Authorization = token) // リクエストパラメータ内の null undefined '' 関数をフィルター cleanObject() 設定を返す }) // レスポンスインターセプターを追加する(レスポンスデータで何かを行う) インスタンス.インターセプター.レスポンス.use((レスポンス) => { //読み込みエフェクトを閉じる関数を追加できます。loading.close() //返された結果データを分解する const res = response.data //カスタムコードを判断し、成功したデータを返します const validateStatus = /^(2|3)\d{2}$/ //2または3で始まるコードは成功したリクエストとみなされます if (validateStatus.test(res.code)) { 戻り値 } //失敗したコードを判断し、プロンプトなどを表示します。if (res.code === 401) { メッセージ.エラー(res.msg) } それ以外 { メッセージ.警告(res.msg) } Promise.reject(res) を返す }, (エラー) => { loading.close() //読み込みエフェクトを閉じる関数を追加できます if (error.response.status === 401) { message.error('トークンの有効期限が切れています。もう一度ログインしてください!') ストレージトークンを削除します。 タイムアウトを設定する(() => { window.location.href = '/ログイン' }, 2000) } それ以外 { (!window.navigator.onLine)の場合{ message.warning('ネットワーク異常です。ネットワークが正常に接続されているか確認してください') } そうでない場合 (error.code === 'ECONNABORTED') { message.warning('リクエストタイムアウト') } それ以外 { message.warning('サーバー異常です。管理者に連絡してください') } } return Promise.reject(error) // 特定のページにエラーを返す} ) インスタンスを返す } 要約するこれで、プロジェクトで axios をカプセル化する方法についての記事は終了です。関連プロジェクトで axios をカプセル化する方法についての詳細は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: Linux には make コマンドがありません (make: *** ターゲットが指定されておらず、makefile または make コマンドのインストール方法が見つかりません)
MySQLの重複排除方法【初級】繰り返しのセリフが少ないdistinctive を使用してそれらを見...
この記事では、天気予報機能を実現するためのVueの具体的なコードを参考までに共有します。具体的な内容...
目次1. axioの基本的な使い方2. クロスドメインの問題を解決するには? 3. パッケージ4. ...
この記事ではクラスタの展開に関連する内容は紹介しませんバージョン制約Docker エンジン >...
現実世界では、鍵は外の世界から身を隠したいときに使用するツールです。コンピュータでは、複数のプロセス...
<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案 W...
トランザクション分離レベルの設定 グローバルトランザクション分離レベルを読み取りコミット済みに設定;...
さっそくコードを見てみましょう * { マージン: 0; パディング: 0; } 。容器 { マージ...
Alibaba Cloud セキュリティグループの概要Alibaba Cloud Server セ...
目次問題の説明:インストール手順1. 準備2. サーバーにリモート接続する3. 証明書と秘密鍵ファイ...
目次背景1. クエリ条件に「or」が含まれているため、インデックスが失敗する可能性があります。 2....
以前、MySQL クエリ文の実行プロセスについての記事がありました。ここでは、更新文の実行プロセスを...
始める前に、process.env.NODE_ENV にはデフォルトで開発と本番の 2 つの状態しか...
問題 1: Baidu Map はタイル画像 (地図が写真で構成されている) を使用しています。ht...
起源最近、私は要件 A に取り組んでいます。そこには、次のように記述される小さな機能ポイントがありま...