blog

基本的なアクシオスとインターフェイスの呼び出しをvueでラップする

> utilsフォルダを作成し、新しい `````` ファイルを作成します。...

Jan 13, 2021 · 3 min. read
シェア

utilsフォルダを作成し、新しいservice.jsファイルを作成します。

import axios from 'axios' import router from '@/router/routers' import store from '../store' import { Notification,MessageBox } from 'element-ui' import { getToken } from '@/libs/utils' //カスタム・トークン取得メソッド const baseUrl = { dev: 'http://...xx',//開発環境 pro: 'http://...xx'//制作環境 } // axiosインスタンスを作成する const service = axios.create({ baseURL: process.env.NODE_ENV === 'production' ? baseUrl.pro : baseUrl.dev, // api ベース_url timeout: 7000 // タイムアウトを要求する }) // request service.interceptors.request.use( config => { if (getToken()) { config.headers['Authorization'] = 'Bearer ' + getToken() // 各リクエストにカスタム・トークンを持たせる。 } config.headers['Content-Type'] = 'application/json' return config }, error => { Promise.reject(error) } ) // response service.interceptors.response.use( response => { const code = response.status if (code < 200 || code > 300) { Notification.error({ title: response.data }) return Promise.reject('error') } else { const { data, status } = response return { data, status } } }, error => { let code = 0 try { code = error.response.status } catch (e) { if (error.toString().indexOf('Error: timeout') !== -1) { Notification.error({ title: 'ネットワーク・リクエスト・タイムアウト', duration: 5000 }) return Promise.reject(error) } } if (code) { if (code === 401) { MessageBox.confirm( 'ログイン・ステータスが切れました、再ログインしてください」。, 'システムは', { confirmButtonText: '再ログインする, cancelButtonText: ' , type: 'warning' } ).then(() => { store.dispatch('LogOut').then(() => {//Vuexのログアウトインターフェースを呼び出す location.reload() // バグを避けるために、vue-routerオブジェクトを再定義する。 }) }) } else if (code === 403) { router.push({ path: '/401' }) } else { const errorMsg = error.response.data if (errorMsg !== undefined) { Notification.error({ title: errorMsg, duration: 5000 }) } } } else { Notification.error({ title: 'インターフェースのリクエストに失敗した, duration: 5000 }) } return Promise.reject(error) } ) export default service

srcディレクトリにapiフォルダを作成し、その中にindex.jsとdemo.jsを作成します。

demo.js

import request from '@/libs/service'//ラップされたaxiosを導入する
export const demo = {
 getTableInfo(params) {
 return request({
 url: '/xxxx', //インターフェース・パス
 method: 'get',
 params
 })
 }
}

index.jsは、すべてのインターフェイス・ファイルを取り込むために作成されました。

import {demo} from './demo'
export default {
 demo
}

main.jsでは.js

import api from './api'
Vue.prototype.$api = api//グローバル変数を作る

この時点で、インターフェース・ファイルを紹介する必要はありません。

async getData() {
 try {
 const data = {
 pageNum:1,
 pageSize:10
 }
 let res = await this.$api.demo.getTableInfo(data)
 console.log(res)
 } catch (e) {
 console.log(e.response.data)
 }
}
Read next

JUC 同時実行ツールクラスの詳細

スレッドプールの実行ルールをより明確にし、リソース不足のリスクを回避できるため、手動作成の方が優れています。一方、自動的に作成されたスレッドプールは、業務に十分に適合しない可能性があります。 CPU集約型:最適なスレッド数は、CPUコア数の1~2倍程度です。 エクゼキュータが終了すると、新しいタスクの投入は拒否されます。 ...

Jan 13, 2021 · 21 min read