简单封装自己的axios
首先先创建自己的index.js文件
然后下载包
npm install --save axios (axios包)
npm install --save qs (进行序列化post请求的)
1.进行环境切换配置,切换生产或者说是测试的环境
先在根目录创建.env.production和.env.development文件
我的判断方式是判断各自文件里面的NODE_ENV等于什么而进行切换的
//.env.development文件
NODE_ENV=development //别用引号引起来
//.env.production
NODE_ENV=production //别用引号引起来
2.开始配置index.js文件
首先,先引入包
import axios from 'axios' //引入axios
import qs from 'qs' //引入qs模块,用来序列化post类型的数据
第二,进行环境的切换
//切换环境,切换url前缀,自己看自己的项目是怎么样的环境进行切换
if (process.env.NODE_ENV == 'development') {
axios.defaults.baseURL = 'http://127.0.0.1:300'
} else if (process.env.NODE_ENV == 'production') {
axios.defaults.baseURL = 'http://127.0.0.1:3000'
}
第三,开始设置请求时间以及请求头
axios.defaults.timeout = 10000; //设置请求超时,10秒
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; //设置post请求的请求头
第四,封装自己的get和post请求,这里仅仅是封装post和get的请求,其他的请求可以参考axios的文档
let $Api = {
// 封装get请求
/**
* get方法,对应的是get请求
* @param {String} url (请求的url地址)
* @param {Object} params (请求参数)
*/
get: function (url, params) {
return new Promise((resolve, reject) => {
axios.get(url, {
params: params
}).then(res => {
resolve(res.data)
}).catch(err => {
reject(err.data)
})
})
},
// 封装post请求
/**
* post方法,对应的是post请求
* @param {String} url (请求的url地址)
* @param {Object} params (请求参数)
*/
post: function (url, params) {
return new Promise((resolve, reject) => {
axios.post(url, qs.stringify(params))
.then(res => {
resolve(res.data)
})
.catch(err => {
reject(err)
})
})
}
}
使用方式,直接挂载在全局变量里面
在main.js里面进行操作
//引入文件
import Vue from 'vue'
import $Api from './Api/index';//自己文件的路径
//挂载在Vue上面
Vue.prototype.$Api = $Api
在其他页面进行使用的时候
this.$Api.get('www.baidu.com',{params:params})
.then(res=>{
console.log(res)
})
this.$Api.post('www.baidu.com',{params:params})
.then(res=>{
console.log(res)
})
关于拦截器
首先先创建自己的request.js文件
然后下载包
npm install --save axios (axios包)
npm install --save qs (进行序列化post请求的)
第一步:引入文件
import axios from 'axios' //引入axios
import qs from 'qs' //引入qs模块,用来序列化post类型的数据
第二步:创建一个axios实例,并且设置超时或者说baseUrl
设置baseUrl的方式
//创建一个实例,并且设置baseUrl和请求超时时间
var instance = axios.create({
timeout: 10000,
baseUrl:'https://'//请求前缀
});
使用.env的方式
//使用此方式,需要对.env.production和.env.development两个文件进行配置
if (process.env.NODE_ENV == 'development') {
axios.defaults.baseURL = 'http://127.0.0.1:3000'
} else if (process.env.NODE_ENV == 'production') {
axios.defaults.baseURL = 'http://127.0.0.1:3000'
}
第三步:进行配置(在官网可以拿到,一个请求前,一个请求获取参数)
instance.interceptors.request.use(
function(config) {
// 在此处可以获取到请求方式(post,get)config.method
// 如果是post请求的话,参数就要进行序列化,这就是为什么需要引入qs
// 获取请求参数config.data
// 还有其他业务就要看自己的需求了
if(config.method == 'post'){
config.data = qs.stringify(config.data)
}
return config;
},
function(error) {
return Promise.reject(error);
}
);
instance.interceptors.response.use(
function(response) {
//这里能获得请求回应数据,可以用来做路由重定向之类的
//response.config.url 获取请求的路径
return response;
},
function(error) {
return Promise.reject(error);
}
);
第四步:导出
export default instance;
第五步:挂载
在main.js引入并且挂载在全局变量里面
//引入文件
import Vue from 'vue'
import request from './Api/request';//自己文件的路径
//挂载在Vue上面
Vue.prototype.$request = request
第六步:使用
this.$requests({ url: "www.baidu.com", methods: "get" }).then((res) => {
console.log(res);
})