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

推薦する

CSSページ下部固定を実現する8つの方法の詳細な説明

ページを書いているときに、ページの内容が小さくてフッターがページの真ん中に留まってしまうといった状況...

nginx での書き換えジャンプの実装

1. 新旧ドメイン名のジャンプ適用シナリオ: ドメイン名ベースのリダイレクト。会社の古いドメイン名は...

要素テーブルヘッダー行の高さの問題の解決

目次序文1. 問題の原因2. 解決策VueはelementUIテーブルtr thの高さと背景色を変更...

SQL文のパフォーマンスを分析するための標準的な要約

この記事では、explain を使用して SQL ステートメントを分析する方法を紹介します。実際、イ...

ウェブページの右側に固定されたフローティングレイヤーの実装コード

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

CentOS7 カーネル カーネル5.0 バージョンアップグレード

アップグレードプロセス:元のシステム: CentOS7.3 [root@my-e450 ~]# un...

この記事ではCSSの組み合わせセレクターの使い方を説明します

CSS 組み合わせセレクターには、単純なセレクターのさまざまな組み合わせが含まれます。 CSS3 に...

React+Typescriptはカウントダウンフックメソッドを実装します

まず、setIntervalはフックとしてカプセル化されます👇 'react' から...

CSS 3.0 テキストホバージャンプ特殊効果コード

これは、CSS 3.0 で実装されたテキストのホバーとジャンプ効果です。効果は次のとおりです。 以下...

フレームセットの高さを設定する際のインターフェース変形の解決策

現在、プロジェクトを作成しました。インターフェースは次のとおりです。これはフレームセットを使用して行...

ウェブページのカラーマッチング例分析: 緑色のカラーマッチングウェブページ分析

<br />緑は黄色と青(寒色と暖色)の中間の色で、より穏やかな色です。そのため、緑は最...

Unicodeの一般的な記号

Unicode は、世界中のすべてのテキストと記号に対応できる国際組織によって開発された文字エンコー...

Vue における $router と $route の違いの詳細な説明

通常、vue プロジェクトではルーティングを使用します。vue-router は vue.js の公...

MAC で Mysql5.7.10 のルートパスワードを変更する方法

まず、MySQLをskip-grant-tablesモードで起動します: mysqld --skip...

初心者のためのWebサイト構築入門 ③ エイリアス(CNAME)レコードとURL転送

①. エイリアス(CNAME)レコードの使用方法:前回の投稿のドメイン名解決では、A レコードの解...