uniappがインターフェースドメイン名を動的に取得する方法を分析する

uniappがインターフェースドメイン名を動的に取得する方法を分析する

背景

インターフェイス ドメイン名はハードコードされておらず、動的に取得されます。具体的な実装は、静的な json ファイルを読み取って実際のインターフェース ドメイン名を設定することです。利点は、元のドメイン名がブロックされる可能性があるため、バックグラウンドで構成ファイルを直接変更できることです。それ以外の場合は、h5 プロジェクトは問題ないかもしれませんが、アプリを再リリースする必要があります。

コード

// httpService.js は uni.request をカプセル化します。

データ要求の入り口では、まずドメイン名が取得され、つまりconfig.requestRemoteIpメソッドが実行されます。

'@/config' から設定をインポートします
'vue' から Vue をインポートします
'@/service/cacheData.js' から cacheData をインポートします。
const MockUtil = () => import('@/libs/mockUtil.js')
'@/libs/storage.js' からストレージをインポートします。

クラス HttpRequest {

    /**
     * インターフェースデータを読み取ります * @param options リクエスト情報 * @param noMock モックデータを全体として使用する場合、実際のデータをリクエストするための別のインターフェースを設定できます * @param cacheId
     * @returns {*}
     */
    非同期リクエスト解決(オプション、urlCustom = '', noMock = false, cacheId = null) {
        let remoteIP = await config.requestRemoteIp(); // インターフェースリクエストドメイン名を動的に設定する if (process.env.NODE_ENV === 'development' && config.isMockApi && !noMock) {
            this.getMockData(オプション) を返します
        }
        if (cacheId && cacheData[cacheId]) {
            this.testHttp(cacheData[cacheId]) を返します。
        }
        新しい Promise を返します ((resolve, reject) => {
            baseUrl を process.env.NODE_ENV === 'development' とします。config.baseUrl.dev : config.baseUrl.pro;
            options.url = baseUrl + options.url + `${urlCustom}`;
            ユニ.リクエスト(
                オブジェクト.assign({
                    成功: (res) => {
                        (res.statusCode != '200')の場合{
                            uni.showToast({
                                タイトル: 'サーバーエラー:' + res.statusCode、
                                アイコン:「なし」
                            })
                            拒否する()
                        }
                        そうでない場合 (res.data.code == 10001) {
                            ストレージ.removeToken();
                            Vue を新しい Vue() にします。
                            vue.$store.dispatch('ログアウト')
                            vue.$routeUtil.reLaunch('main');
                        }
                        
                        そうでない場合 (res.data.code != 200) {
                            (res.data.message)の場合{
                                uni.showToast({
                                    アイコン: 'なし'、
                                    タイトル: res.data.message
                                });
                            }
                            拒否(res.data)
                        } それ以外 {
                            if (キャッシュID) {
                                キャッシュデータ[キャッシュID] = res.data.data
                            }
                            解決(res.data.data)
                        }
                    },
                    失敗: エラー => {
                        uni.showToast({
                            タイトル: 「サーバーエラー」
                            アイコン:「なし」
                        })
                    }
                }、オプション)
            );
        })
    }

    /**
     *モックデータは必要に応じてインポートされます* @param options
     * @returns {*}
     */
    非同期getMockData(オプション) {
        const モック = MockUtil() を待機します
        const MockUrl = Mock.default[options.url]
        if (typeof MockUrl !== 'function') {
            this.testHttp(MockUrl) を返します
        }
        if (options.method === 'post') {
            this.testHttp(MockUrl(options.data, false)) を返します
        }
        this.testHttp(MockUrl(options.params, true)) を返します
    }
    testHttp(データ) {
        pro = new Promise(function(resolve, reject) { とする
            setTimeout(関数() {
                解決(データ)
            }, 50)
        })
        リターンプロ
    }
}
デフォルトの新しい HttpRequest() をエクスポートします

// config.js

定数設定 = {
  isMockApi: false、
  // リクエスト URL: 'http://qiniu.eightyin.cn/teacherpath.json?time=' + Math.random().toString(36),
  リクエストURL: 'http://qiniu.eightyin.cn/teacherpathtest.json?time=' + Math.random().toString(36),
  ベースURL: {
     
    開発者: ''、
    プロ: ''
  },
  画像: {
    ossドメイン: ''
  },
  uuid: Math.random().toString(36).substring(3, 20),
  リクエストリモートIP: () => {
      コンソールログ('config:', config)
      (config.RemoteIpInited) の場合
        Promise.resolve() を返します。
        新しい Promise を返します ((resolve, reject) => {
            uni.リクエスト({
                URL: config.requestUrl、
                成功: (応答) => {
                    //todo テスト // config.baseUrl.pro = response.data.data.path;
                    config.baseUrl.dev = 'http://bayin5.mycwgs.com/';
                    config.img.ossDomain = response.data.data.ossDomain;
                    config.RemoteIpInited = true;
                    解決する()
                },
                失敗: () => {
                    config.RemoteIpInited = true;
                    解決する()
                }
            })
        });
  }
}

デフォルト設定をエクスポート

上記は、uniapp がインターフェイスドメイン名を動的に取得する方法の詳細な分析です。uniapp がインターフェイスドメイン名を動的に取得する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • uniapp プロジェクトの最適化方法と提案
  • vscodeを使用してuniappを開発する方法
  • uniapp パッケージ化されたアプレット レーダー チャート コンポーネントの完全なコード
  • uniappを使用してWeChatミニプログラムでEChartsを使用する方法
  • uniapp 要素ノードスタイルの動的変更の詳細な説明

<<:  SQL ステートメント実行の詳細な説明 (MySQL アーキテクチャの概要 -> クエリ実行プロセス -> SQL 解析順序)

>>:  Zabbix 監視ソリューション - 最新の公式バージョン 4.4 [推奨]

推薦する

MySQL はどのようにしてマスターとスレーブの一貫性を確保するのでしょうか?

目次MySQLマスタースレーブの基本原理3つのbinlog形式の比較混合形式のバイナリログが存在する...

Nginx サーバーが Systemd カスタム サービス プロセス分析を追加

1. nginxを例に挙げるyumコマンドを使用してNginxをインストールしましたSystemd ...

Centos7 ベースの Varnish キャッシュ プロキシ サーバーを展開する

1. ワニスの概要1. ワニスの紹介Varnish は、新しいソフトウェア アーキテクチャを使用し、...

ウェブサイトのハイパーリンクを開く方法に関する議論

新しいウィンドウが開きます。 利点: ユーザーがリンクをクリックしても、現在閲覧しているコンテンツは...

CSS ピクセルとさまざまなモバイル画面適応の問題に対する解決策

ピクセル解決通常、モニター解像度と呼ばれるものは、実際にはモニターの物理的な解像度ではなく、デスクト...

PrometheusとGrafanaを使用したMySQLサーバーのパフォーマンス監視の詳細な説明

概要Prometheus は、HTTP プロトコルを介してリモート マシンからデータを収集し、ローカ...

React setStateデータ更新メカニズムの詳細な説明

目次setStateを使用する理由setStateの使用法非同期または同期更新要約するsetStat...

js におけるイベントバブリングとイベントキャプチャの簡単な分析

目次01-イベントバブリング1.1- イベントバブリングの概要1.2-イベントバブリングの利用(イベ...

Vue+thinkphp5.1+axiosでファイルアップロードを実現

この記事では、thinkphp5.1 + Vue+axiosを使用してファイルをアップロードする方法...

Ubuntu 16.04 64ビット版を3つのステップで32ビットプログラムと互換性を持たせる

ステップ1: システムのアーキテクチャを確認する dpkg --print-architecture...

Mysql 日付クエリの詳細な紹介

現在の日付を照会する CURRENT_DATE() を選択します。 CURDATE() を選択する;...

IntelliJ IDEA に Docker プラグインをインストールする詳細な手順 (2018 バージョン)

目次1. 開発環境2. dockerプラグインをインストールする1. アイデアのインストール2. イ...

Vueはユーザーログインとトークン検証を実装します

フロントエンドとバックエンドを完全に分離する場合、Vue プロジェクトでトークン検証を実装する一般的...

Vueストレージにはブール値のソリューションが含まれています

Vueはブール値でストレージを保存します今日、問題に遭遇しました。バックグラウンドから返された真偽の...