Heim >Web-Frontend >js-Tutorial >Ausführliche Erläuterung des Axios Encapsulation Fetch-Aufrufs
Dieses Mal werde ich Ihnen eine detaillierte Erklärung zum Axios-Paketabruf geben. Was sind die Vorsichtsmaßnahmen für den Axios-Paketabruf? Hier ist ein praktischer Fall.
Informationen zur grundlegenden Verwendung von Axios finden Sie auf der offiziellen Axios-Website
//依赖于axios对私有ajax进行修改 import Qs from 'qs' import axios from 'axios' import router from 'router/index' import {errorPrompt, loading, closeLoading} from 'util/util' export const status = { SUCCESS: '100', NET_ERR: '101', // 网络连接异常,请稍候再试 BIZ_ERR: '103', // 业务请求异常 NO_AUTH: '104' } export function fetch(options) { return new Promise((resolve, reject) => { let instance = axios.create({ baseURL: process.env.BASE_API, timeout: 2000, headers: { // "tracecode": window.encodeURIComponent(JSON.stringify({"ua":"","cv":"20161230","token":"3dwo0onUUsPKVJcP8tk","os":"windows10","app":"kind","ws":"1*1","pkey":"f8caf7d7-a5d4-4710-b06f-28a922b6a467"})) "tracecode": commonBizHeader(isManager(options)), 'Content-Type': 'application/x-www-form-urlencoded' }, transformRequest: [function (data) { // Do whatever you want to transform the data let ret = '' for (let it in data) { ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&' } return ret }] }); instance.interceptors.request.use(function (response) { // 请求拦截 loading(); return response; }, function (error) { console.log('error 请求拦截 : ', error) return Promise.reject(error); }); instance(options) .then(response => { const res = response.data; if (res.errorCode != status.SUCCESS) { switch (res.errorCode) { case status.NET_ERR: { errorPrompt(res.errorMsg) reject(res) break; } case status.BIZ_ERR: { errorPrompt(res.errorMsg) reject(res) break; } case status.NO_AUTH: { errorPrompt(res.errorMsg) let session = require("storejs") if (isManager(options)) { // 管理端 session.remove("managerUserToken") router.push({path: '/manager/login'}) } else { session.remove("clientUserToken") router.push({path: '/client/login'}) } reject(res) break } } } closeLoading(); resolve(res); }).catch(error => { closeLoading(); errorPrompt('网络连接错误,请检查您的网络') console.log('error', error); // for debug reject(error); }); }); } function commonBizHeader (isManager) { let session = require("storejs"); let params = {} params['ua'] = window.navigator.userAgent.toLowerCase() params['cv'] = '123456' params['ws'] = window.screen.height + '*' + window.screen.width params['token'] = "123456" params['os'] = window.navigator.appCodeName if (isManager) { params['token'] = session.get('managerUserToken') // 管理 - 用户令牌 } else { params['token'] = session.get('clientUserToken') // 用户 - 用户令牌 } params['app'] = 'kind' let UUID = session.get('pkey') if (!UUID) { UUID = getUUID() window.localStorage.setItem('pkey', UUID) } return encodeURIComponent(JSON.stringify(params)) } function isManager(options) { return options && options.url && options.url.indexOf("/api/worker") != -1 } /** * 获取UUID * @returns {string} */ export function getUUID() { let len = 32 // 32长度 let radix = 16 // 16进制 let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('') let uuid = [] let i radix = radix || chars.length if (len) { for (i = 0; i < len; i++) { uuid[i] = chars[0 | Math.random() * radix] } } else { var r uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-' uuid[14] = '4' for (i = 0; i < 36; i++) { if (!uuid[i]) { r = 0 | Math.random() * 16 uuid[i] = chars[(i === 19) ? (r & 0x3) | 0x8 : r] } } } return uuid.join('').toLowerCase() }
Dies ist im Vue-Projekt: die aufrufende Methode im Die API ist wie folgt (Reaktion, ich habe gerade angefangen zu lernen und mache immer noch einfache Demos)
import {fetch} from 'api/fetch' export const callAuthCode = (userPhone) => { return fetch({ url: '/api/auth/code', method: 'post', data: ({ userPhone: userPhone, }), }) }
Da unser Backend eine strikte Unterscheidung zwischen get/Post-Anfragen erfordert, muss der gekapselte Methodenaufruf erfolgen Methode enthalten, Wenn der Hintergrund verarbeitet wurde und alle Post-Anfragen gestellt werden können, können Sie auf der offiziellen Axios-Website alle Methoden in .post ändern
Erklärung zur Abrufmethode: Sie kapselt hauptsächlich das Abfangen von Anforderungen. Antwortabfangen und Standardanforderungstext. Konvertieren vom JSON-Format in das Formularformat. Diese sind natürlich auf der offiziellen Axios-Website zu finden, aber sie werden nur gesammelt.
Bitte wenden Sie den Anforderungsheader nicht direkt an ist eine spezielle Konfiguration, die für unser Backend erforderlich ist. Nachdem Sie den Fall in diesem Artikel gelesen haben, müssen Sie unterscheiden, wo aufgerufen werden soll Für weitere spannende Inhalte achten Sie bitte auf die chinesische PHP-Website
und andereverwandte Artikel! Empfohlene Lektüre:
JS berechnet automatisch die HotelübernachtungskostenDer Effekt der Anzeige des Ladekreises, bevor das Bild geladen wirdSo verwenden Sie die DatumsauswahlDas obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Axios Encapsulation Fetch-Aufrufs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!