ベーシックエディションステップ1: Axiosを構成するまず、axios 構成とインターセプターを保存する Service.js を作成し、最後に axios オブジェクトをエクスポートします。私は通常 elementUI をより頻繁に使用しますが、ここで独自の UI ライブラリを使用することもできます。 'axios' から axios をインポートします 'element-ui' から { Message, Loading } をインポートします const ConfigBaseURL = 'https://localhost:3000/' //デフォルトのパス。envを使用して環境を決定することもできます。let loadingInstance = null //ここでは読み込み中です。 //createメソッドを使用してaxiosインスタンスを作成します export const Service = axios.create({ timeout: 7000, // リクエストタイムアウト baseURL: ConfigBaseURL, メソッド: 'post'、 ヘッダー: { 'コンテンツタイプ': 'application/json;charset=UTF-8' } }) // リクエストインターセプターを追加する Service.interceptors.request.use(config => { loadingInstance = Loading.service({ ロック: 真、 テキスト: '読み込み中...' }) 設定を返す }) // レスポンスインターセプターを追加する Service.interceptors.response.use(response => { ロードインスタンスを閉じる() // console.log(応答) 応答データを返す }, エラー => { console.log('TCL: エラー', エラー) const msg = error.Message !== undefined ? error.Message : '' メッセージ({ メッセージ: 'ネットワークエラー' + メッセージ、 タイプ: 'エラー'、 期間: 3 * 1000 }) ロードインスタンスを閉じる() Promise.reject(error) を返します。 }) 特定のインターセプター ロジックは、特定のビジネスによって異なります。ここにはロジックはなく、グローバル ロードを追加しただけです。 ステップ2: リクエストをカプセル化するここで、特定のリクエストを含む別の request.js を作成します。 './Service' から {Service} をインポートします。 エクスポート関数 getConfigsByProductId(productId) { 戻り値 Service({ url: '/manager/getConfigsByProductId', パラメータ: { 製品ID: 製品ID } }) } エクスポート関数 getAllAndroidPlugins() { 戻り値 Service({ url: '/manager/getAndroidPlugin', メソッド: 'get' }) } エクスポート関数 addNewAndroidPlugin(data) { 戻り値 Service({ url: '/manager/addAndroidPlguin', データ: JSON.stringify(データ) }) } もちろん、URL を再度カプセル化して別のファイルに入れることもできます。これは意味がなく、複雑さが増すだけだと思います。ここで注意すべき主な点は、命名の問題です。機能に応じて名前を付けることをお勧めします。たとえば、ここではリクエストメソッド + 関数またはコンテンツ + パラメータを使用します。このように、getConfigsByProductId という名前も非常に明確です。 ステップ3: 使用Vueコンポーネントでは '@/api/request.js' から {getAllAndroidPlugins、getConfigsByProductId、addNewAndroidPlugin} をインポートします。 すべてのAndroidプラグインを取得する() .then(res=>{ }) main.js でのグローバル使用 '@/api/Service.js' から {Service} をインポートします。 Vue.prototype.$axios=サービス 上級バージョンvue cliのアップグレードに伴い、core-js\babelやその他の依存関係もアップグレードされました。これでasync/awaitを自由に使用できるようになりました。したがって、このカプセル化は、以前のPromiseをasync awaitにアップグレードするためのものです。まず、それはまだ同じです。まずaxiosをカプセル化します //サービス.js 'axios' から axios をインポートします const ConfigBaseURL = 'https://localhost:3000/' // デフォルトのパス。env を使用して環境を決定することもできます // create メソッドを使用して axios インスタンスを作成します export const Service = axios.create({ timeout: 7000, // リクエストタイムアウト baseURL: ConfigBaseURL, メソッド: 'post'、 ヘッダー: { 'コンテンツタイプ': 'application/json;charset=UTF-8' } }) // リクエストインターセプターを追加する Service.interceptors.request.use(config => { 設定を返す }) // レスポンスインターセプターを追加する Service.interceptors.response.use(response => { // console.log(応答) 応答データを返す }, エラー => { Promise.reject(error) を返します。 }) この時点で、axios オブジェクトを取得しました。次に、非同期エラーの処理に主に使用される一般的なライブラリ、await-to-js をお勧めします。 コードは上から続きます。 'await-to-js' からインポート エクスポート関数isObj(obj) { const typeCheck = typeof obj!=='undefined' && typeof obj === 'object' && obj !== null 戻り値 typeCheck && Object.keys(obj).length > 0 } 非同期関数_get(url, qs,headers)をエクスポートします。 定数パラメータ = { URL、 メソッド: 'get'、 パラメータ: qs ? qs : '' } if (headers) { params.headers = headers } const [err, res] = await to(Service(params)) もし (!err && res) { 戻り値 } それ以外 { console.log(err) を返します } } get をカプセル化する場合は、パラメータのみを考慮し、await-to-js を使用して待機中のエラーをキャプチャし、成功した場合にのみデータを返し、エラーが発生した場合はインターセプターを使用します。 非同期関数_get(url, qs,headers)をエクスポートします。 定数パラメータ = { URL、 メソッド: 'get'、 パラメータ: isObj(qs) ? qs: {} } if (isObj(headers)) {params.headers = headers} const [err, res] = await to(Service(params)) もし (!err && res) { 戻り値 } それ以外 { console.log(err) を返します } } これは私がパッケージ化した投稿です 非同期関数_post(url, qs, body)をエクスポートします。 定数パラメータ = { URL、 メソッド: 'post'、 パラメータ: isObj(qs) ? qs: {}, データ: isObj(body) ? 本文: {} } const [err, res] = await to(Service(params)) もし (!err && res) { 戻り値 } それ以外 { console.log(err) を返します } } 使用時に直接導入することも、複数回カプセル化することもできます。 //a.vue <スクリプト> './Service' からインポート{_get} エクスポートデフォルト{ 方法:{ 非同期テスト(){ const res = _get('http://baidu.com') を待機します } } } </スクリプト> 上記は、Vue で Axios をカプセル化するいくつかの方法の詳細です。Vue で Axios をカプセル化する詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: Centos7.5 は mysql5.7.24 バイナリ パッケージの展開をインストールします
MySQL DECIMALデータ型は、データベースに正確な数値を保存するために使用されます。会計シス...
静的ノードはマシン上に固定されており、いくつかの固定コマンドを通じて起動されます。動的ノードには複数...
目次背景は次のとおりです。何が起こるでしょうか?背景は次のとおりです。実際の開発では、ネットワークの...
docker イメージ ID は一意であり、イメージを物理的に識別できます。repository: ...
IPSec の概要IPSec (インターネット プロトコル セキュリティ): ネットワーク層と適用さ...
目次序文スタックと2つのキューを理解する実行プロセス簡単な例より難しい例要約する序文以下の内容はブラ...
目次1. 親コンポーネントが子コンポーネントに値を渡す1. 親コンポーネント.vue 2. サブコン...
httpリターンコードリスト(以下は概要です)詳細な中国語の説明についてはここをクリックしてくださ...
Xhtml には、あまり使用されないが非常に便利なタグが多数あります。半分の労力で 2 倍の結果を達...
目次1. 重複排除前後のデータの比較2. 使い方1. フィルターとマップを使用する2. 削減を使用す...
1. ffmpeg がビデオ ファイルをプッシュする場合、オーディオとビデオのエンコード形式は H2...
目次空の文字列 '' と null を比較するケース1: 空の文字列を使用する ...
最近、多くの学生から Web ページのエンコーディングについて質問を受けています。gb2312 と ...
テクノロジーファンHTMLウェブページ、知っておくべきYouyou が開発した vue フロントエン...
この記事では、キャンバスでスクラッチカード効果を描画するための具体的なコードを参考までに共有します。...