vue中封装axios,添加请求拦截器,响应拦截器
vue中封装axios,添加请求拦截器,响应拦截器首先在vue项目中src文件夹下新建request文件夹,关于接口封装文件都放在request文件夹中。然后在request文件夹中创建index.js,url.js,api.js三个js文件。url.js文件主要放置项目中api请求域名和打包的域名(包括测试环境,预生产环境,生产环境)const VUE_APP_MODE = process.en
·
vue中封装axios,添加请求拦截器,响应拦截器
首先在vue项目中src文件夹下新建request文件夹,关于接口封装文件都放在request文件夹中。
然后在request文件夹中创建index.js,url.js,api.js三个js文件。
url.js文件主要放置项目中api请求域名和打包的域名(包括测试环境,预生产环境,生产环境)
const VUE_APP_MODE = process.env.VUE_APP_MODE;
let baseURL;
if (VUE_APP_MODE == 'development') { // 本地
baseURL = 'http://127.0.0.1:8888';//测试地址
} else {
// pre 预生产
// prod 生产
switch (VUE_APP_MODE) {
case 'test':// 测试
baseURL = 'http://test.com/api';
break;
case 'pre':// 预生产
baseURL = 'http://pre.com';
break;
case 'prod':// 生产
baseURL = 'http://prod.com';
break;
default:// 测试
baseURL = 'http://test.com';
break;
}
}
module.exports = {
baseURL
};
index.js文件主要对axios封装,添加请求拦截器和响应拦截器
/**
* 请求封装
*/
import axios from 'axios';
import configUrl from './url.js';
import store from '../store';
const service = axios.create({
baseURL: configUrl.baseURL,
// withCredentials: true, // 当跨域请求时发送cookie
timeout: 15000 // 请求超时
});
//添加请求拦截器 请求接口统一添加token
service.interceptors.request.use(
config =>{
config.headers.token = store.getters.token || ''; //请求添加token
return config;
},
error =>{
return Promise.reject(error);
}
)
// 响应拦截器
service.interceptors.response.use(
response => {
//如果接口返回token,替换本地旧token
if (response.headers.token) {
sessionStorage.setItem("token", response.headers.token);
}
//自定义设置后台返回code对应的响应方式
if (response.data.code == 203) { // 未登录或登录超时
return Promise.reject(new Error('登录超时'));
} else { //接口正常,返回数据
return response;
}
},
error => {
if (error.message) {
// this.$massage.error('服务器开小差了,请稍后再试!')
//错误响应
alert('服务器开小差了,请稍后再试!')
}
return Promise.reject(error);
}
);
//暴露出封装过的服务
export default service;
api.js文件主要放置项目中的接口 (post和get两种参数不同,注意区别data和params)
//引入上边封装的axios文件
import request from "@/request";
// import QS from "qs";
//获取用户信息 post请求
export const getUserInfo = data => {
return request({
url: "/user/info",
method: "POST",
headers:{
"content-type": "application/json;charset=UTF-8"
},
data
});
};
//下载用户上传模板 get请求
export const downLoadTemplate = params=> {
return request({
url: "/user/info/template",
method: "GET",
headers:{
"content-type": "application/json;charset=UTF-8"
},
params
});
};
以上就是axios的封装方法,请求拦截器和响应拦截器的添加方法。
api的使用方法:
<template>
<div>
</div>
</template>
<script>
import { getUserInfo } from '@/request/api'
export default {
name:'',
components: {},
data() {
return { }
},
methods: {
getUserInfo(data={}){//获取用户信息
const loading = this.$loading() //请求响应开始,打开loading
const params = { //参数
phone:this.phone,
password:this.password,
}
getUserInfo(params).then(res=>{
if(res.data.code===200){
// 请求成功callback
}else{
// 请求失败callback
this.$messageError.call(this,res.data.msg)
}
loading.close() //请求响应结束,关闭loading
}).catch(()=>{
loading.close() //请求响应结束,关闭loading
})
},
}
}
</script>
<style lang='scss' scoped>
</style>
如果感觉以上代码有用,请点个赞,谢谢!
更多推荐
已为社区贡献1条内容
所有评论(0)