実際のプロジェクトではバックグラウンドとのデータ連携が欠かせません。普段は axios ライブラリを使用しているので、以下の例も axios をベースにカプセル化しています。 1. インストール最初のステップは、npmでaxiosをインストールすることです。とても簡単です: npm install axios 2. カプセル化に問題はないプロジェクトにカプセル化されたインターフェースがない場合、ファイル内のあらゆる場所に次のインターフェース呼び出しメソッドが表示されます。 this.$axios.post("/user/add", { パラメータ: { 名前: this.name, 年齢: this.age } }) .then(res => { コンソール.log(res) }) .then(err => { コンソール.log(res) }) この書き方でも不可能ではないのですが、いくつか欠点があります。インターフェースリクエストの URL がさまざまなファイルに分散しています。インターフェース呼び出しが成功または失敗したときに何らかの処理を実行する必要がある場合は、各ファイルを変更する必要があります。したがって、これらのインターフェース要求は一緒に一元管理されます。調整がある場合は、各ファイルを再度確認しなくても、一元管理されたファイルで変更を直接見つけることができます。 3. ファイルを作成するまず、プロジェクトの src ディレクトリに、次のように新しいフォルダーとファイル ディレクトリ構造を作成します。
API インターフェース ファイル モジュールの分割は、実際のプロジェクト、ビジネス機能、ビジネス ロジック、またはその他の形式に基づいて行うことができます。 4. アドレス設定をリクエストする通常、複数のプロジェクト環境があり、少なくとも 1 つには開発環境と本番環境があります。通常、開発環境と本番モードでは baseURL が異なるため、環境に応じて異なる baseURL を切り替える必要があります。 address.js ファイル: // process.env.NODE_ENV に応じて異なるベース URL を切り替えます const isPro = process.env.NODE_ENV === 'production' モジュール.エクスポート = { // 'apis': vue.config.js のプロキシによって設定されたプロキシ ベース URL: isPro ? 'http://192.168.100.120/ceds' : '/apis' } 5. Axios の設定、リクエスト ヘッダーとレスポンス コードの処理の設定一般的な考え方は、get や post などのリクエスト メソッドを含むリクエスト クラスをカプセル化することです。これらのリクエスト メソッドはリクエスト メソッドを呼び出し、リクエスト メソッドは渡されたさまざまなパラメーターを通じて元の axios リクエストを呼び出し、Promise を返します。 request.js ファイル: 'axios' から axios をインポートします 'qs' から Qs をインポートします 'vue' から Vue をインポートします import { getToken } from '@Utils/session.utils' // トークンファイルを保存して取得する import address from './address' // アドレスを要求する クラスリクエスト{ コンストラクタ(){ // axiosインスタンスを作成する this._axios = axios.create({ ベースURL: アドレス.ベースURL、 timeout: 1000 * 5, // リクエストタイムアウトヘッダー: {} }) // リクエストインターセプション this._axios.interceptors.request.use( 設定 => { constリクエストヘッダー = { 'X-リクエスト': 'XMLHttpRequest', 'コンテンツタイプ': 'application/json; 文字セット=UTF-8', 'アクセス制御許可オリジン': '*', token: getToken() // リクエストヘッダーにトークンを追加する } config.headers = Object.assign(config.headers、リクエストヘッダー) 設定を返す }, エラー => { Promise.reject(エラー) } ) } // リクエスト メソッドに基づいて、パラメータをクエリに配置するか本文に配置するかを決定します。 // 最も直感的な違いは、たとえば、GET リクエストでは URL にパラメータが含まれるのに対し、POST ではリクエスト ボディを通じてパラメータがボディ内に配置され、送信時のパラメータ形式が異なることです // 以下は、私がリクエスト メソッドで一般的に使用する 4 つのパラメータ形式です。これらは自分で調整できます。/** * GETリクエストを送信します * @param {String} URLアドレス * @param {Object} queryクエリパラメータ * @return jsonデータ */ 取得 (URL、クエリ = {}) { this._request('get')(url, { を返します。 ...クエリ }) } /** * 投稿リクエストを送信 * @param {String} URL アドレス * @param {Object} 本文クエリパラメータ * @return json データ */ 投稿(url, 本文 = {}, ヘッダー) { データを入力します。 if (this.isFormData(body)) { データ = 本文 } そうでない場合は、Array.isArray(body) となります。 データ = 本文 } それ以外 { データ = { ...本文 } } this._request('post')(url, headers)(url, data); を返します。 } (URL、本文 = {})を配置します{ this._request('put')(url, { を返します。 ...体 }); } 削除(url, 本文 = {}) { this._request('delete')(url, { を返します。 ...体 }); } isFormData = v => { Object.prototype.toString.call(v) === '[オブジェクト FormData]' を返します } /** * リクエストヘッダーを設定 * @param {Object} header リクエストヘッダー */ setHeaders(ヘッダー) { Object.keys(ヘッダー).forEach(キー => { this._axios.defaults.headers[キー] = ヘッダー[キー] }) } // リクエストヘッダーを処理する ハンドルヘッダー() { 定数ヘッダー = {} ヘッダー['XMIME-TYPE'] = '3' ヘッダー['Content-Type'] = 'application/json; charset=UTF-8' リターンヘッダー } /** * リクエストを送信 * @param {String} method リクエストメソッドタイプ * @param headers * @returns {function(*=, *=):Promise<unknown>} * @プライベート */ _request (メソッド、ヘッダー) { this.setHeaders(this.handleHeaders()) // 統合リクエストヘッダーを設定する if (headers) { this.setHeaders(headers) //カスタムリクエストヘッダー} 戻り値 (URL、データ、タイムアウト) => { 定数設定 = { URL、 方法、 タイムアウト: タイムアウト || this._axios.defaults.timeout } //リクエスト構成を構築 // リクエストタイプを判定する get post const paramType = ['get', 'delete'].indexOf(method) !== -1 ? 'params' : 'data' config[パラメータタイプ] = データ //パラメータのシリアル化 config.paramsSerializer = params => { Qs.stringify(params, { arrayFormat: 'repeat' }); を返します。 } 新しい Promise を返します ((resolve, reject) => { // 実際のリクエストを送信し、権限を確認し、404やその他のステータスをチェックします this._axios .request(設定) .then(応答 => { if (this.handleSuccessStatus(response.data.code, response.data)) { レスポンスヘッダー['content-type'] !== 'text/plain; charset=urf-8'の場合{ 解決する( // レスポンス結果の二次パッケージ化 Object.assign( { 成功: 数値(response.data.code) === 200、 データ: response.data.data、 メッセージ: 応答データメッセージ }, レスポンスデータ ) ) // 返された結果を処理する } else { 解決(応答データ) } } }, 応答 => { // エラーコードを処理する if(response.response) { const ステータスコード = response.response.status this.handleErrorStatus(ステータスコード) } それ以外 { Vue.prototype.$message.error(レスポンス.message) } 拒否(応答) }) .catch(エラー => { 拒否(エラー) }) }) } } } // リクエストは成功し、エラーコードが返されます // 具体的なステータスコードはバックエンド開発者と一致し、ステータスコードに応じて対応するプロンプトが表示されます // 以下はプロジェクトでの私の操作ですが、自分で調整して拡張できます handleSuccessStatus (code, data) { 結果 = '' フラグを false にする スイッチ(コード){ ケース '20007': result = 'セカンダリ認証パスワードが見つかりませんでした! ' フラグ = true 壊す ケース '20008': result = 'セカンダリ認証パスワードが変更されていません。まずこれを変更してください。 ' フラグ = true 壊す ケース '20009': 結果 = 'セカンダリ認証がまだ有効になっていません。管理者に問い合わせてください! ' フラグ = true 壊す ケース '90001': result = 'セカンダリ認証パスワードを入力してください! ' フラグ = true 壊す ケース '90002': result = '操作権限がありません! ' フラグ = true 壊す デフォルト: 壊す } // 通知 // $message メソッドは、私がオンデマンドで導入した element-ui のプロンプト コンポーネントです。これを独自のプロンプト コンポーネントに置き換えることができます。if (result) { Vue.prototype.$message.error(結果) } リターンフラグ } // エラーコードに基づいてエラーメッセージを取得します。handleErrorStatus (statusCode) { errorMsg = '' とします ステータスコード === 500 の場合 errorMsg = 'データ要求に失敗しました。管理者に連絡してください! ' } それ以外の場合 (ステータスコード === 404) { errorMsg = 'リクエストアドレスエラー! ' } それ以外の場合 (ステータスコード === 402) { errorMsg = '現在、このデータを操作する権限がありません。 ' } それ以外 { errorMsg = 'リクエストエラー! ' } // Vue.prototype.$message.error(errorMsg) に通知します。 } } デフォルトの新しいリクエストをエクスポートする() 6. 使用インターフェース管理ファイルでは、上記でカプセル化されたリクエスト クラスを呼び出して、対応するパラメータを渡すことができます。 user.api.js ファイル: '../services/request' から http をインポートします /** * @description ユーザーリストを取得* @param {*} params リクエストインターフェースのパラメータ*/ // ここで定義された reqUserList メソッドは、カプセル化されたリクエスト内の get メソッドを呼び出します。get メソッドの最初のパラメータはリクエスト アドレスで、2 番目のパラメータはクエリ パラメータです。 export const reqUserList = params => http.get('/user/list', params) 呼び出された .vue ファイルで、このメソッドを導入し、パラメータを渡します。 import { reqUserList } from '@Apis/user.api' // API をインポート エクスポートデフォルト{ 名前: 'UserList', …… 作成された() { }, メソッド: { 非同期getUsers() { //APIインターフェースを呼び出してパラメータを渡す const res = await reqUserList({ ページ: 1, サイズ: 10 }) console.log(res) // 応答結果を取得する} } } このようにして、インターフェースのカプセル化と基本的な使用が完了します。 PS: 上記のファイル名、フォルダ名、メソッド名、パスなどはすべて私が取得したものです。ご自身のコーディングスタイルに合わせて調整してください。 上記は、Vue プロジェクトで axios リクエストを使用する方法の詳細です。Vue プロジェクトで axios を使用する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Linux 環境の Apache サーバーでセカンダリドメイン名を設定する方法の詳細な説明
>>: Linux 環境の Apache で https サービスを有効にする方法の詳細な説明
apt-get を使用してインストールすると、非常に遅くなります。国内のソースを変更すると、この問題...
1. ダウンロードApacheの公式サイトhttp://httpd.apache.org/にアクセス...
vueチャットボックスで絵文字を送信し、vueインターフェースで絵文字を送信するための具体的なコード...
(I) mysql5.7のインストール: ❀詳細:無料のグリーンバージョン5.7のインストール方法は...
1. 問題の説明MYSQL を起動すると、図に示すように、「ERROR 2003 (HY000): ...
鏡とは何ですか?イメージは、複数のイメージ レイヤー (UnionFS および AUFS ファイル ...
結果: html <nav id="nav-1"> <a cl...
前回の記事「Zen Coding: HTML/CSS コードを素早く記述する方法」を公開した後、一部...
1. floatの基本的な使用例1. まず 2 つの div ボックスを作成し、高さ、幅、背景色を設...
<br />ホームページの右側にあるスクロールバーを削除するにはどうすればよいですか? ...
以下は、私のプロジェクトでこのプロパティを使用する方法の例です。 (1)激しく透明な浮遊コードをコピ...
製品デザインのプロセスにおいて、デザイナーは常に写真を非常に美しくすることを好みます。仮想ページのコ...
Dockerはmysqlをインストールします docker search mysql 検索 dock...
目次目的npm init および package.json ファイルモジュールのインストールと管理モ...
これまでのブログ投稿では、HTML 5 ではあまり使われていないが注目すべき API やヒントに焦点...