1,引用axios后直接设置配置,这种配置方式会影响到所有的接口,本人在目前实习阶段就是采用这种写法较多
这里我是将所有的接口地址都写在urls.js下,这里的baseURL可以根据生产环境配置
if(process.env.NODE_ENV === 'development') {
baseURL = 'xxx本地环境xxx'
} else if(process.env.NODE_ENV === 'production') {
baseURL = 'xxx生产环境xxx'
}
axios.defaults.baseURL = urls.BASE_URL
axios.defaults.withCredentials = true
axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
// 默认Post请求使用 application/json 形式
axios.defaults.headers.post['Content-Type'] = 'application/json'
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded
axios.defaults.timeout = 10000
第二种方法就是实例化一个axios对象,这个方法主要的好处就是创建多个axios,一部分接口用一部分axios,属性也都可以设置
let newAxios = axios.create({
baseURL: 'xxxxx',
timeout: 1000,
withCredentials:true
//在第二种的基础上可以针对个别接口进行设置
instance.get('/xxx',{
timeout: 5000
})
axios请求拦截器
这个时候拦截下来的请求还没有发出,在这个是时候我们可以对这个请求进行各种操作,高级一点的拦截器,还可以根据请求发出的一些信息,进行过滤。例如,一些接口需要token或者其他的登录信息。往往会在后端进行验证,但是在程序请求量非常大的时候,可以在前端进行验证,请求中没有的必要信息的时候进行拦截。
axios.interceptors.request.use(res => { // 封装请求 ... return res }, err => { // 请求出现错误时回调 return Promise.reject(err) })
axios响应拦截器
// axios.interceptors.reponse.use(res => { // 对结果数据进行操作 return res }, err => { //接口处理错误 return Promise.reject(err) })
promise.all # 如果有100个请求,你如何使用Promise控制并发?
function postUrls(path, params, options) {
let paths = path.split("|")
let allPromise = []
for (let index = 0
let p1 = new Promise((resolve, reject) => {
path = url.getWebPath(paths[index])
let opts = {
headers: {}
}
if (store.loadSessionStore("loginToken")) {
opts.headers["x-auth-token"] = store.loadSessionStore("loginToken")
}
opts.transformRequest = [
function(data) {
let ret = ""
for (let it in data) {
ret +=
encodeURIComponent(it) + "=" + encodeURIComponent(data[it]) + "&"
}
return ret
}
]
opts = dsf.mix(opts, options || {})
Axios.post(path, params, opts)
.then(res => {
resolve(res)
})
.catch(err => {
reject(err)
})
})
allPromise.push(p1)
}
// 调用Promise.all().then(res=>{})
let allPromiseObj = Promise.all(allPromise)
return allPromiseObj
}