vue中请求接口怎么封装公共地址_vue请求接口的封装

import api from './api';

import request from'./request';//获取url上的rest参数,返回参数列表 /{userId}/{roleId} => ['userId', 'roleId']

functiongetUrlParams(url) {return (url.match(/\{(\w+)\}/g) || []).map(param => /\{(\w+)\}/.exec(param)[1]);

}/** 创建一个请求函数

* 闭包,用于保存isProcessing变量

* 通过isProcessing控制接口不发生多次请求

**/

function createRequest(url, method = 'post') {

let isProcessing= false;

let timeOut= true;

const urlParams= getUrlParams(url); //获取url上的rest参数 用于后续处理

//encryResquest 控制参数是否集体加密

//encryResponse 控制回参是否需要解密

return function (data, callback, config = {}, force = false) {//force 传true跳过不同时多次请求限制

if (isProcessing && !force) return;

isProcessing= true;

let headerIn={

headers:{}

}if(sessionStorage.getItem("userTk"))headerIn.headers.Authorization = sessionStorage.getItem("userTk")

config=Object.assign(headerIn,config)

console.info("工程头部",config)

let option=Object.assign({

url: url,

method: method,

}, config);//处理rest参数, 把url上的{param}替换,并且把data对应的key删掉,防止引起可能的400错误

urlParams.forEach(param =>{

option.url=option.url.replace(`{${param}}`, data[param]);

Reflect.deleteProperty(data, param);

});if (method === 'post') option.data =data;if (method === 'get') option.params =data;

request(option)

.then(res=>{

console.info("终极参数",res)

isProcessing= false;var goLogin = false;if(res.data.statusCode === "403"){

goLogin= true}else{var resList = res.data.toString().split('statusCode=')if(resList.length>1){var tiplist = resList[1].split(', ')var code = tiplist.length>0?tiplist[0]:''

if(code === '403'){

goLogin= true}

}

}if(goLogin){

alert("超时登录,请重新登录")

setTimeout(()=>{

location.href="/"},500)return;

}

callback(res.data,res.headers);

})

.catch(err =>{

isProcessing= false;if(err.response) {

const code=err.response.status;if(timeOut && code === 401){

timeOut= falsealert("超时登录,请重新登录")

setTimeout(()=>{

timeOut= truelocation.href="/"},500)return;

}

callback({statusCode: code, message: `服务出错了:${code},请稍后再试!`});

}else{

console.info(err)

console.error('回调中代码逻辑出问题了!', err);

}

});

}

}

let service={};

Object.keys(api).forEach(module=>{

let moduleReq= service[module] ={};

Object.keys(api[module]).forEach(name=>{

const apiConfig=api[module][name];//获取url 是一个string时默认使用post请求,是一个对象时,通过对象的method来调用对象的url

if (typeof apiConfig === 'string') {

moduleReq[name]=createRequest(apiConfig);

}else{

moduleReq[name]=createRequest(apiConfig.url, apiConfig.method);

}

});

});

exportdefault service;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue使用axios发送请求时,可以将请求接口进行封装,以提高代码的可维护性和复用性。 首先,在Vue项目安装Axios库: ``` npm install axios --save ``` 然后,在需要使用请求接口的地方引入axios: ``` import axios from 'axios' ``` 接下来,我们可以创建一个名为api.js的文件,用于封装请求接口。在api.js,我们可以定义各种请求接口的方法,例如: ``` import axios from 'axios' const baseUrl = 'http://api.example.com' //接口请求基础URL export const getUserInfo = (userId) => { return axios.get(baseUrl + '/user/' + userId) } export const postUserInfo = (userInfo) => { return axios.post(baseUrl + '/user', userInfo) } export const deleteUserInfo = (userId) => { return axios.delete(baseUrl + '/user/' + userId) } ``` 在上述代码,我们定义了三个请求接口方法,分别是获取用户信息、提交用户信息和删除用户信息。 接下来,在需要使用接口的组件引入这些接口方法: ``` import { getUserInfo, postUserInfo, deleteUserInfo } from './api.js' ``` 然后,在组件可以直接使用这些封装好的接口方法发送请求,例如: ``` getUserInfo(123).then(response => { //处理请求成功后返回的数据 }).catch(error => { //处理请求失败的错误 }) const userInfo = { //用户信息数据 } postUserInfo(userInfo).then(response => { //处理请求成功后返回的数据 }).catch(error => { //处理请求失败的错误 }) deleteUserInfo(123).then(response => { //处理请求成功后返回的数据 }).catch(error => { //处理请求失败的错误 }) ``` 上述代码演示了如何使用封装好的接口方法发送请求,其.then()方法处理请求成功后返回的数据,.catch()方法处理请求失败的错误。 通过封装接口方法,我们可以将复杂的请求逻辑隐藏在api.js文件,使组件更加清晰和简洁,提高了项目的可维护性。同时,由于接口方法已经封装好,可以在其他组件重复使用,提高了代码的复用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值