序文最近、プロジェクトを構築しているときに、リクエストのカプセル化について考え、どのようにカプセル化するかを考えました。あなたたち大人にとっては小さなことかもしれませんが、私にとっては小さな挑戦でもあります。私の想像では、いくつかの基本的な設定と要求された特定のインターフェースは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 という問題を解決する方法
この記事の例では、円形のプログレスバーのドラッグアンドスライドを実現するための具体的なJSコードを紹...
この質問は、Nuggets のメッセージから生まれました。友人が、次のコードの高さ遷移アニメーション...
このチュートリアルの動作環境: Windows 7 システム、nodejs バージョン 12.19....
まず、HTML タグのいくつかの特性を知っておく必要があります。 1. 「<keyword&g...
1. ボックスを中央に配置するいくつかの方法を記録します。 1.0、マージン幅固定、高さ中央配置。 ...
CentOS 7が正常にインストールされると、OpenJDKのJREがデフォルトでインストールされて...
序文非表示要素の 3 つの属性である表示、可視性、不透明度の類似点と相違点は、フロントエンドの就職面...
Lottie は、Airbnb が開発した iOS、Android、React Native 向けの...
テーブルを削除することはあまり一般的ではありませんが、特に外部キーの関連付けがあるテーブルの場合は、...
セル - 表の内容 セルの余白 (表の余白) (cellpadding) - セルの外側の距離を表し...
1. 準備1.1 service.bat を含む tomcat 圧縮パッケージをダウンロードします。...
シリアル化の実装InnoDB は 2 つの方法でシリアル化を実装します。まず、SELECT 文が明示...
デフォルトのブリッジ ネットワークのため、コンテナーを再起動すると IP アドレスが変更されます。シ...
HTML でアンカーの位置を設定する方法はいくつかあるので、ここで紹介します。 1. ID ポジショ...
序文WeChat ミニプログラムのネイティブ UI が少し物足りないと感じることがあるので、サードパ...