Maison > Article > interface Web > Comment ajouter un intercepteur de requêtes dans Uniapp
Comment ajouter un intercepteur de requêtes à uniapp : 1. Définissez la classe LsxmRequest et ajoutez la configuration par défaut, l'intercepteur et la méthode de requête ; 2. Par la suite, vous devez personnaliser la configuration et obtenir l'adresse de l'interface, et ajouter Méthodes get et set dans la classe ;3. Utilisez la fonctionnalité Symbol pour définir quatre variables privées afin d'éviter la pollution des variables.
L'environnement d'exploitation de ce tutoriel : système windows7, version uni-app2.5.1, ordinateur DELL G3 Cette méthode convient à toutes les marques d'ordinateurs.
Comment ajouter un intercepteur de requêtes à uniapp :
1 Utilisez la fonctionnalité Symbole pour définir quatre variables privées afin d'éviter la pollution des variables
const config = Symbol('config') const isCompleteURL = Symbol('isCompleteURL') const requestBefore = Symbol('requestBefore') const requestAfter = Symbol('requestAfter')
2. .Définition de la classe LsxmRequest et ajout de la configuration par défaut, de l'intercepteur et de la méthode de requête
class LsxmRequest { //默认配置 [config] = { baseURL: '', header: { 'content-type': 'application/json' }, method: 'GET', dataType: 'json', responseType: 'text' } //拦截器 interceptors = { request: (func) => { if (func) { LsxmRequest[requestBefore] = func } else { LsxmRequest[requestBefore] = (request) => request } }, response: (func) => { if (func) { LsxmRequest[requestAfter] = func } else { LsxmRequest[requestAfter] = (response) => response } } } static [requestBefore] (config) { return config } static [requestAfter] (response) { return response } static [isCompleteURL] (url) { return /(http|https):\/\/([\w.]+\/?)\S*/.test(url) } request (options = {}) { options.baseURL = options.baseURL || this[config].baseURL options.dataType = options.dataType || this[config].dataType options.url = LsxmRequest[isCompleteURL](options.url) ? options.url : (options.baseURL + options.url) options.data = options.data options.header = {...options.header, ...this[config].header} options.method = options.method || this[config].method options = {...options, ...LsxmRequest[requestBefore](options)} return new Promise((resolve, reject) => { options.success = function (res) { resolve(LsxmRequest[requestAfter](res)) } options.fail= function (err) { reject(LsxmRequest[requestAfter](err)) } uni.request(options) }) } get (url, data, options = {}) { options.url = url options.data = data options.method = 'GET' return this.request(options) } post (url, data, options = {}) { options.url = url options.data = data options.method = 'POST' return this.request(options) } }
3. Plus tard, vous devez personnaliser la configuration et obtenir l'adresse de l'interface. Ajouter les méthodes get et set dans la classe :
setConfig (func) { this[config] = func(this[config]) } getConfig() { return this[config]; }<.>4. Utilisation La méthode d'enregistrement du plug-in personnalisé attribue l'interface dans apis.js (apis.js doit être importé dans main.js plus tard) à la variable de prototype Vue personnalisée $lsxmApi afin d'éviter d'avoir à l'introduire. une fois sur chaque page, dans chaque page Le cycle de vie beforeCreate d'une page est mélangé.
LsxmRequest.install = function (Vue) { Vue.mixin({ beforeCreate: function () { if (this.$options.apis) { console.log(this.$options.apis) Vue._lsxmRequest = this.$options.apis } } }) Object.defineProperty(Vue.prototype, '$lsxmApi', { get: function () { return Vue._lsxmRequest.apis } }) } export default LsxmRequest5. Instanciez et personnalisez les éléments de configuration de la requête dans config.js (ajoutez un jeton dans l'en-tête en fonction des besoins du projet) et l'intercepteur
import LsxmRequest from './LsxmRequest' const lsxmRequest = new LsxmRequest() // 请求拦截器 lsxmRequest.interceptors.request((request) => { if (uni.getStorageSync('token')) { request.header['token'] = uni.getStorageSync('token'); } return request }) // 响应拦截器 lsxmRequest.interceptors.response((response) => { console.log('beforeRespone',response); // 超时重新登录 if(response.data.isOverTime){ uni.showModal({ title:'提示', content:'您已超时,请重新登录!', showCancel:false, icon:'success', success:function(e){ if(e.confirm){ uni.redirectTo({ url: '/pages/login/login' }) } } }); } else { return response; } }) // 设置默认配置 lsxmRequest.setConfig((config) => { config.baseURL = 'http://xxxxx.com' if (uni.getStorageSync('token')) { config.header['token'] = uni.getStorageSync('token'); } return config; }) export default lsxmRequest6 Dans l'introduction de main.js, montez l'API. à Vue
import LsxmRequest from './service/LsxmRequest.js' import apis from './service/apis.js' import lsxmRequest from './service/config.js' Vue.use(LsxmRequest) Vue.prototype.baseDomain = lsxmRequest.getConfig().baseURL App.mpType = 'app' const app = new Vue({ store, apis, ...App }) app.$mount()7. Lorsque vous devez ajouter une interface, il vous suffit d'ajouter l'interface dans apis.js (l'interface dans apis.js peut être divisée en fonction des fonctions à l'avenir, et le module Gestion)
import lsxmRequest from './config.js' export default{ apis:{ //获取验证用户令牌 getLoginToken(data){ return lsxmRequest.post('/xxx/xxx/getLoginToken', data) }, //登录 login(data){ return lsxmRequest.post('/xxx/xxx/login', data) } } }8. À ce stade, vous pouvez utiliser
this.$lsxmApi.getLoginToken({}).then((resToken) => { console.log(resToken) }
pour en savoir plus sur d'autres articles de haute qualité, veuillez faire attention à uni-app colonne~
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!