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 [推奨]

推薦する

WeChat ミニプログラム ユーザー認証のベストプラクティス ガイド

序文WeChat アプレットを開発する際には、ユーザーの権限が必要なページを使用する必要があることが...

Vue で AES.js を使用する詳細な手順

AES暗号化の使用データ転送の暗号化と復号化処理 --- AES.js最初のステップ: vue に ...

フロントエンドJavaScriptの約束

目次1. Promiseとは何か2. 基本的な使い方3. Promiseメソッド3.1 Promis...

js を使用してシンプルなスイッチ ライト コードを実装する

体の部位: <button>ライトのオン/オフを切り替える</button>...

HTMLは角丸四角形を簡単に実装します

質問: div+css と配置を使用して角丸四角形を実現するにはどうすればよいですか?ソリューション...

LinuxはRsync+Inotifyを使用してローカルとリモートのデータのリアルタイム同期を実現します。

0x0 テスト環境本社本番サーバーと支社バックアップサーバーはリモートデータバックアップが必要です...

Zabbix を使用して ogg プロセスを監視する (Windows プラットフォーム)

この記事では、Windows プラットフォームで ogg プログラムを監視する方法を紹介します。 (...

Baotaパネルを再起動すると、「-ModuleNotFoundError: No module named 'geventwebsocket'」というメッセージが表示されます。

背景:サーバーがFlaskプロジェクトをデプロイし、python3をインストールしたため、再起動時に...

JSはUUIDとNanoIDというユニークなIDメソッドを生成します

目次1. NanoIDがUUIDに取って代わる理由2. jsを生成する方法3. ナノID方式序文:ユ...

Linux サーバーは最大いくつのポートを開くことができますか?

目次ポート関連の概念:ポートとサービスの関係1: nmapツールが開いているポートを検出する2: n...

DockerコンテナがJupyterにアクセスできない問題の解決策

このプロジェクトでは、環境を構築するために Docker コンテナを使用します。Dockerfile...

Dockerはnextcloudを使用してプライベートBaiduクラウドディスクを構築します

突然、ドキュメントの保存と共同作業のためのプライベート サービスを構築する必要がありました。多くの場...

MySQL 5.7.27 winx64 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.27 winx64のインストールと設定方法を参考までに紹介します。...

Linux の MariaDB データベースについて

目次Linux の MariaDB データベースについて1. データベースとは何ですか? 2. デー...

Windows および Linux で tomcat9 を介して war パッケージを手動で展開する方法

Windows 環境と Linux 環境では結果が異なります。ウィンドウズステップ 1: Maven...