序文最近、プロジェクトを構築しているときに、リクエストのカプセル化について考え、どのようにカプセル化するかを考えました。あなたたち大人にとっては小さなことかもしれませんが、私にとっては小さな挑戦でもあります。私の想像では、いくつかの基本的な設定と要求された特定のインターフェースは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 という問題を解決する方法
目次1. Nginxは負荷分散の原則を実装する2. Nginxの動的および静的分離の原則Nginx ...
この記事では、MySQL 8.0.15 winx64 圧縮パッケージのインストールと設定方法を参考ま...
1. 公式ウェブサイト www.mysql.com にアクセスし、ダウンロードを選択します。 2. ...
SSH は Secure Shell の略で、安全な伝送プロトコルです。Ubuntu クライアントは...
<br />jb51.net では、常に記事のセマンティクスを重視してきましたが、HTM...
目次1. Vue3コンポーネント通信方式2. Vue3通信の使い方2.1 小道具2.2 $エミット2...
目次react-beautiful-dndを選ぶ理由基本的な使い方基本概念使い方使用中に発生した問題...
Apple マグカップのアイコンと追加機能 HD ストレージボックス – アドオンパックセイバースノ...
この記事では、雨滴効果を実現するためのJavaScriptキャンバスの具体的なコードを参考までに紹介...
以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピー<!DO...
Microsoft IE 5.0 がリリースされる前は、Web プログラミングにおける最大の課題は、...
序文BINARY と VARBINARY は、文字列ではなくバイナリ文字列を格納する点を除いて、CH...
最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...
私がデザインした最初の Web ページは次のとおりです。 私はこの業界に7年間在籍し、プログラミング...
CSS スタイル仕様1. クラスセレクター2. タグセレクター3. IDセレクター4. CSSスタイ...