序文最近、プロジェクトを構築しているときに、リクエストのカプセル化について考え、どのようにカプセル化するかを考えました。あなたたち大人にとっては小さなことかもしれませんが、私にとっては小さな挑戦でもあります。私の想像では、いくつかの基本的な設定と要求された特定のインターフェースは2つのファイルに配置する必要があるため、axios.jsとapi.jsという2つの新しいファイルを作成しました。 アクシオスaxios.js は主に、baseURL リクエスト インターセプター、レスポンス インターセプターなどの axios の基本的な構成に使用されます。 'axios' から axios をインポートします。 'element-ui' から ElementUI をインポートします。 'element-ui/lib/theme-chalk/index.css' をインポートします。 '../router' からルーターをインポートします。 まず、現在の js に axios を導入します。要素を導入する目的は、そのコンポーネントを現在の js で使用することであり、レスポンス インターセプターでさまざまな戻り値を直接促すことが目的です。レスポンスインターセプターの特定の戻り値に応じてページをリダイレクトするためのルーターが導入されています。たとえば、権限がない場合はログインページにジャンプします。 process.env.NODE_ENV === '開発'の場合{ axios.defaults.baseURL = 'api'; } そうでない場合 (process.env.NODE_ENV === 'production') { axios.defaults.baseURL = 'https://xxxxxxxxx/index/'; } ベースURL処理では開発環境と本番環境を区別しています //リクエストインターセプターは、通常のリクエストを送信するときとフォームデータを送信するときのリクエストヘッダーを区別します。axios.interceptors.request.use((config) => { config.headers['Content-Type'] = 'application/json'; if (config.method === 'post') { //FormDataのリクエストヘッダー if (Object.prototype.toString.call(config.data) === '[object FormData]') { // リクエストインターセプター処理 config.headers['Content-Type'] = 'multipart/form-data'; } そうでない場合 (Object.prototype.toString.call(config.data) === '[object String]') { config.headers['Content-Type'] = 'application/x-www-form-urlencoded'; } } それ以外 { config.headers['Content-Type'] = 'application/json'; } 設定を返します。 }); //レスポンスインターセプター axios.interceptors.response.use( (設定) => { 値をconfig.dataとします。 config.status === 200 の場合 if (typeof value === 'string') { if (値 === 'タイムアウト') { ElementUI.MessageBox.confirm('操作を長時間行っていないか、操作する権限がありません。ログインページに移動して再度ログインしてください。', 'Prompt', { confirmButtonText: '確認'、 タイプ: '警告' }).then(() => { router.push({ name: 'ログイン' }); }); }それ以外 { ElementUI.Message.info(値); } } } 設定を返します。 }, (エラー) => { 値をerr.response.statusTextとします。 スイッチ (err.response.status) { ケース400: ElementUI.Message.error('構文形式が正しくないため、サーバーはこのリクエストを理解できません') 壊す; ケース401: ケース403: ケース404: ケース405: ElementUI.Message.warning(値); 壊す; デフォルト: ElementUI.Message.error('操作中にエラーが発生しました。この操作は無効です!' + value); 壊す; } err.responseを返す } ); レスポンス インターセプターについては、バックエンドから返される値に応じて処理します。バックエンドではあまり作業していないので、単純に戻り値を処理するだけです。 以下はgetとpostのパッケージです 非同期関数 axiosGet(url, params = {}) をエクスポートします。 res = axios.get(url, { params: params }); を待機します。 res.status === 200の場合{ res.dataを返す }それ以外 { res.statusTextをスローする } } 非同期関数 axiosPost(url, params = {}) をエクスポートします。 res = axios.post(url, params); を待機します。 res.status === 200の場合{ res.dataを返す }それ以外 { res.statusTextをスローする } } 判定のために戻り値を直接取得するには、async と await を使用します。戻りが成功した場合は戻り値が出力され、失敗した場合はエラーがスローされます。 最後に、カプセル化されたメソッドをエクスポートします api.jsapi.js全体にはプロジェクト内のすべてのインターフェースが保存されます './axios' から { axiosGet, axiosPost } をインポートします。 axios.jsを導入し、カプセル化されたaxiosGetとaxiosPostを取得する エクスポートデフォルト{ getLogin:(パラメータ = {}) => { axiosPost('/login', params) を返します }, getUser:(パラメータ = {}) => { axiosGet('http://localhost:3000/user', パラメータ) を返します } } ここでは2つの簡単なインターフェースを例として使用し、api.jsでの処理は完了しています。 設定されたインターフェースを使用するこの時点でaxiosはパッケージ化されており、次のステップはそれの使用方法を示すことです。 '@/server/api' から DbauditServer をインポートします。 //インターフェイスを呼び出すためにファイルにapi.jsを導入する formData = 新しいFormData formData.append('パスワード', this.formLabelAlign.password) let res1 = await DbauditServer.getLogin(formData) //呼び出すだけで正常に動作します。let res2 = await DbauditServer.getUser() もちろん、より詳細にすることもできます。なぜなら、get と post をカプセル化すると、エラーの戻り値が直接スローされるからです。したがって、インターフェイスの呼び出しを try catch でラップして、エラーに対して特定の処理を実行することもできます。 要約するシンプルなカプセル化と axios の使用に関するこの記事はこれで終わりです。axios のシンプルなカプセル化に関するその他の関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: Linux で yum と入力した後に -bash: /usr/bin/yum: No such file or directory という問題を解決する方法
500 (内部サーバー エラー) サーバーでエラーが発生したため、要求を完了できませんでした。 50...
最近、 Ubuntu 20.04でkazamを使用して録音しているときに、問題が見つかりました。シス...
エラー発生: MySQL 5.7 から SQL にデータベースをエクスポートし、それを MySQL ...
1. MySQLサービスをシャットダウンする# service mysqld stop 2. rpm...
MySQL InnoDB 監視 (システム層、データベース層) MySQL の監視に関しては、My...
nginx の概要nginx は、無料のオープンソースの高性能 HTTP サーバーおよびリバース プ...
序文TCP サーバの最大同時接続数に関して、「ポート番号の上限が 65535 であるため、TCP サ...
初回の読み込みを高速化できるルートの遅延読み込みをどうして忘れられるでしょうか?ルーティングの遅延読...
準備する: MySQL 8.0 Windows zip パッケージのダウンロード アドレス: htt...
原因外部ファイルをミニプログラムにインポートする方法は次のとおりです: @import "...
かなりの数のウェブサイトがデジタルページング効果を使用しています。たとえば、このサイトのページングも...
MySQL マルチテーブルクエリ (直積原理)まず、データが使用するテーブルを決定します。デカルト...
オリジナル: http://developer.yahoo.com/performance/rule...
Web 標準について議論するときに必ず話題になるのは、構造とプレゼンテーションを分離することの重要性...
目次1. Dockerのセキュリティ問題2. Dockerアーキテクチャの欠陥とセキュリティメカニズ...