npm install axios
在项目中导入axios的使用,axios的实例对象
import axios from 'axios'; // axios的实例对象
axios.get('http://localhost/:8000/index').then((res) => {
console.log(res.data)
})
axios.get('http://httpbin.org/get', {
params: {
name: 'wendy',
age: 18
}
})
.then((res) => {
console.log(res.data)
})
axios.post('http://httpbin.org/post', {
data: {
name: 'why',
age: 18
}
})
.then((res) => {
console.log(res.data)
});
额外补充的Promise
中类型的使用, Promise
本身是可以有类型
new Promise<string>((resolve) => {
resolve('abc'); // 传入的参数就必须是string的类型
}).then((res) => {
console.log(res.length)
});
axios.defaults.baseURL = 'http://httpbin.org';
axios.defaults.timeout = 10000; // 超时时间
// axios.defaults.headers = {}
axios.get('/get', {
params: {
name: 'wendy',
age: 18
},
timeout: 5000, // 单个请求配置的超时时间
headers: {}
})
.then((res) => {
console.log(res.data)
});
axios.all([
axios.get('/get', { params: { name: 'why', age: 18 } }),
axios.post('/post', { data: { name: 'why', age: 18 } })
])
.then((res) => {
// 返回的res是个response的数组
console.log(res[0].data)
console.log(res[1].data)
})
在请求或响应被 then
或 catch
处理前拦截它们;并在此做相对应的事件(例如:展示加载的loading的样式)
// 拦截axios中任意的请求
axios.interceptors.request.use(fn1, fn2); // 请求拦截
axios.interceptors.response.use(fn1, fn2); // 响应拦截
// fn1: 请求发送成功会执行的函数
// fn2: 请求发送失败会执行的函数
request
的请求拦截
axios.interceptors.request.use(
(config) => {
// 想做的一些操作
// 1.给请求添加token
// 2.isLoading动画
console.log('请求成功的拦截')
return config
},
(err) => {
console.log('请求发送错误')
return err
}
)
response
的响应拦截
// fn1: 数据响应成功(服务器正常的返回了数据,状态码为200)
axios.interceptors.response.use(
(res) => {
console.log('响应成功的拦截')
return res
},
(err) => {
console.log('服务器响应失败')
return err
}
)
在开发中,有时候我们需要根据不同的环境设置不同的环境变量,常见的有三种环境:
那么如何区分环境变量呢?常见有三种方式:
process.env.NODE_ENV
的值进行区分;通过在开发中手动的注解进行开发展示;
// dev 的开发环境
const BASE_URL = 'http://***.org/dev';
const BASE_NAME = 'coderwhy';
// prod 的生产环境
const BASE_URL = 'http://***.org/prod';
const BASE_NAME = 'kobe';
// test 的测试环境
const BASE_URL = 'http://***.org/test';
const BASE_NAME = 'james';
是通过webpack
中的definePlugin
插件注入不同环境的值,从而达到区分不同的环境
// 新建一个config.ts进行编辑,导入到axios实例中使用
// 开发环境: development
// 生成环境: production
// 测试环境: test
let BASE_URL = ''
const TIME_OUT = 10000
if (process.env.NODE_ENV === 'development') {
BASE_URL = 'http://localhost/:8000/'
} else if (process.env.NODE_ENV === 'production') {
BASE_URL = 'http://***.org/prod'
} else {
BASE_URL = 'http://***.org/test'
}
export { BASE_URL, TIME_OUT }
vueCLI搭建的项目中,可使用创建不同的文件夹来配置文件,.env
是未区分环境,都可使用;其余的三个对应的是不同的环境下的文件;
注入不同的变量使用;如下是.env.test文件;
这里的变量的名称不能随便取,一般都有BASE_URL
,NODD_ENV
;如果是自己随意写的WENDY
是注入不成功;
希望得到自定义的名称,必须是VUE_APP_**
的模式使用
VUE_APP_BASE_URL=https://****.org/test
VUE_APP_BASE_NAME=james
在项目中的使用,直接输出即可:
console.log(process.env.VUE_APP_BASE_URL);
console.log(process.env.VUE_APP_BASE_NAME);