Heim >Web-Frontend >js-Tutorial >Beispiel für Schritte zum Konfigurieren von Axios in Vue

Beispiel für Schritte zum Konfigurieren von Axios in Vue

小云云
小云云Original
2018-05-14 16:40:315309Durchsuche

Als Vuejs-Autor You Yuxi bekannt gab, dass er Vue-Ressourcen nicht mehr pflegen wird, und jedem empfiehlt, Axios zum Starten zu verwenden, ist Axios immer mehr Menschen bekannt. In diesem Artikel werden hauptsächlich die Schritte zum Konfigurieren von Axios basierend auf Vue vorgestellt. Jetzt werde ich es mit Ihnen teilen und Ihnen hoffentlich helfen.

Einführung in axios

axios ist ein Promise-basierter HTTP-Client für Browser und Nodejs. Er weist die folgenden Eigenschaften auf:

  1. XMLHttpRequest über den Browser erstellen

  2. HTTP-Anfrage von node.js erstellen

  3. Support Promise API

  4. Anfragen und Antworten abfangen

  5. Anfrage- und Antwortdaten konvertieren

  6. Anfrage abbrechen

  7. JSON-Daten automatisch konvertieren

  8. Der Client unterstützt die Verhinderung von CSRF/XSRF

1. Hintergrund

  1. Ajax-Anfragen sind in der Projektentwicklung unverzichtbar

  2. Einige Ajax-Anfragen erfordern kein Laden oder wenn die Anfragezeit weniger als eine bestimmte Zeit beträgt, wird das Laden nicht angezeigt

  3. Einheitliche Verarbeitung von Anfragen im Projekt (Fehlerbehandlung, Verarbeitung der Rückgabedatenformatierung, Ladeverarbeitung, Tokenverarbeitung)

  4. Konfiguration basierend auf persönlicher Sicht Das Projekt ist konfiguriert, vux-bezogene Komponenten wurden geladen und einige abhängige Importe werden durchgeführt (können nach Bedarf konfiguriert werden)

import Vue from 'vue'
import axios from 'axios'
//项目的一些环境配置参数,读取host
import config from '@/config'
//vuex状态管理,这里主要进行对全局loading的控制
import store from '@/store'
//vue-router对相应状态码的页面操作(router实例)
import router from '@/router'
//console对应封装
import { log } from '@/utils'

Lösung

Wir definieren mehrere Parameter für die Deklaration im Axios-Paket

// 加载最小时间
const MINI_TIME = 300
// 超时时间(超时时间)
let TIME_OUT_MAX = 5000
// 环境value
let _env = process.env.NODE_ENV
// 请求接口host
let _apiHost = config.api
// 请求组(判断当前请求数)
let _requests = []

Im Allgemeinen sind der Root-Host und der Content-Type in einem Projekt vereinheitlicht, und Axios wird hier einheitlich konfiguriert (falls dies der Fall ist). Das Backend erfordert Formulardaten im FormData-Format, d qs-Bibliothek (qs. Stringify wird verarbeitet und übertragen)

axios.defaults.headers.common['Content-Type'] = 'application/json'
axios.defaults.baseURL = _apiHost

Im Allgemeinen wird mehr als eine Anfrage gleichzeitig im Projekt ausgeführt (noch nicht zurückgegeben), um festzustellen, ob noch eine Anfrage ausgeführt wird Ajax, Sie müssen _ Das Anforderungsarray wird verwaltet; Als nächstes wird Axios basierend auf den oben genannten Vorbereitungen verarbeitet

/**
 * 添加请求,显示loading
 * @param {请求配置} config 
 */
function pushRequest(config) {
 log(`${config.url}--begin`)
 _requests.push(config)
 Vue.$vux.loading.show({
  text: 'Loading'
 })
 store.dispatch('loading')
}

/**
 * 移除请求,无请求时关闭loading
 * @param {请求配置} config 
 */
function popRequest(config) {
 log(`${config.url}--end`)
 let _index = _requests.findIndex(r => {
  return r === config
 })
 if (_index > -1) {
  _requests.splice(_index, 1)
 }
 if (!_requests.length) {
  Vue.$vux.loading.hide(0)
  store.dispatch('loading', false)
 }
}

3 Verarbeitete Daten werden zurückgegeben. Wenn dies fehlschlägt, ermitteln Sie den Statuscode
/**
 * 请求地址,请求数据,是否静默,请求方法
 */
export default (url, data = {}, isSilence = false, method = 'POST') => {
 let _opts = { method, url }
 //通用数据的合并(token)
 let _data = Object.assign({}, data, { token: store.getters.token })
 const _query = {}
 for (let _key in _data) {
  if (_data.hasOwnProperty(_key) && _data[_key] !== '') {
   _query[_key] = _data[_key]
  }
 }
 //axios实例请求定时器ID
 let _timer = null
 //判断请求类型
 if (method.toLocaleUpperCase() === 'POST') {
  _opts.data = _query
 } else {
  _opts.params = _query
 }
 //返回一个promise
 return new Promise((resolve, reject) => {
  //实例化axios
  const _instance = axios.create({
   timeout: TIME_OUT_MAX
  })
  //定义请求的唯一标识
  let _random = { stamp: Date.now(), url: `${_apiHost + url}` }
  //判断是否静默(静默的话就不加入请求标识队列,不是则申明此请求实例的定时器)
  if (!isSilence) {
   _timer = setTimeout(() => {
    pushRequest(_random)
   }, MINI_TIME)
  }
  //axios实例发送当前请求
  //请求完成:1、取消当前请求的定时器;2、在当前请求标识队列中移除当前标识;

Verwandte Empfehlungen:

  _instance(_opts)
   .then(res => {
    let responseData = res.data
    clearTimeout(_timer)
    popRequest(_random)
    resolve(res.data)
   })
   .catch(res => {
    let _response = res.response
    let _message = null
    clearTimeout(_timer)
    popRequest(_random)
    switch (_response.status) {
     case 404:
      _message = '404,错误请求'
      break
     case 401:
      router.push({ path: '/login', query: { redirect: router.currentRoute.fullPath } })
      _message = '未授权'
      break
     case 403:
      _message = '禁止访问'
      break
     case 408:
      _message = '请求超时'
      break
     case 500:
      _message = '服务器内部错误'
      break
     case 501:
      _message = '功能未实现'
      break
     case 503:
      _message = '服务不可用'
      break
     case 504:
      _message = '网关错误'
      break
     default:
      _message = '未知错误'
    }
    if (!isSilence) {
     Vue.$vux.toast.show({
      text: _response.data && _response.data.error ? _response.data.error : _message,
      type: 'warn',
      width: '10em'
     })
    }
    reject(res)
   })
 })
}


Über VueJs zum Erstellen einer Analyse des Axios-Schnittstellenanforderungstools

Eine kurze Einführung in die Get- und Post-Methoden in Axios

Vollständige Vue-Analyse – Vue+Vue-router+Vuex+axios

Das obige ist der detaillierte Inhalt vonBeispiel für Schritte zum Konfigurieren von Axios in Vue. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn