axios是什么

Axios 是一个基于 promise 的 HTTP 库,简单的讲就是可以发送get、post请求。

Axios特性

1、可以在浏览器中发送 XMLHttpRequests
2、可以在 node.js 发送 http 请求
3、支持 Promise API
4、拦截请求和响应
5、转换请求数据和响应数据
6、能够取消请求
7、自动转换 JSON 数据
8、客户端支持保护安全免受 XSRF 攻击

Axios用在什么场景?

在特性里面已经有提到,浏览器发送请求,或者Node.js发送请求都可以用到Axios。像Vue、React、Node等项目就可以使用Axios,如果你的项目里面用了Jquery,此时就不需要多此一举了,jquery里面本身就可以发送请求。

获取数据(GET)

  1. //获取按钮
  2. const btns = document.querySelectorAll("button");
  3. btns[0].onclick = function () {
  4. axios({
  5. method: "GET",
  6. url: "http://localhost:3000/posts/2",
  7. }).then(response => {
  8. console.log(response);
  9. });
  10. };

提交数据(POST)

  1. btns[1].onclick = function () {
  2. axios({
  3. method: "POST",
  4. url: "http://localhost:3000/posts",
  5. data:{
  6. title: "我是 ade kang",
  7. author: "ade kang"
  8. }
  9. }).then(response => {
  10. console.log(response);
  11. });
  12. };

更新数据(PUT)

  1. btns[2].onclick = function () {
  2. axios({
  3. method: "PUT",
  4. url: "http://localhost:3000/posts/3",
  5. data: {
  6. title: "我是 ade kang",
  7. author: "李四",
  8. },
  9. }).then(response => {
  10. console.log(response);
  11. });
  12. };

注意这样修改,会将它id为3里面的数据全部修改

删除数据(DELETE)

  1. btns[3].onclick = function () {
  2. axios({
  3. method: "DELETE",
  4. url: "http://localhost:3000/posts/3",
  5. }).then(response => {
  6. console.log(response);
  7. });
  8. };

其他请求

  1. //获取按钮
  2. const btns = document.querySelectorAll("button");
  3. //发送 GET 请求
  4. btns[0].onclick = function () {
  5. // axios()
  6. axios.request({
  7. method: "GET",
  8. url: "http://localhost:3000/comments",
  9. })
  10. .then(response => {
  11. console.log(response);
  12. });
  13. };
  14. //发送 POST 请求
  15. btns[1].onclick = function () {
  16. // axios()
  17. axios.post("http://localhost:3000/comments", {
  18. body: "喜大普奔",
  19. postId: 2,
  20. })
  21. .then(response => {
  22. console.log(response);
  23. });
  24. };

请求配置(Request Config)

url:请求地址

method:请求类型

baseURL:url的基础结构 例如http://localhost:3000

transformRequest

transformResponse:对响应的结果做出改变,然后回调处理结果,做预处理

headers:请求头的处理地方

params:请求的参数,配置的是一个对象

  1. axios({
  2. url: '/post',
  3. // /post?a=100&b=200
  4. // /post/a/100/b/200
  5. // /post/a.100/b.200
  6. params: {
  7. a:100,
  8. b:200
  9. }
  10. })

paramsSerializer:参数序列化

timeout:超时时间

withCredentials:跨域时当为true允许携带cooki

validateStatus:对响应成功时做出设置

proxy:设置代理

  1. proxy: {
  2. protocol: 'https',
  3. host: '127.0.0.1',
  4. port: 9000,
  5. auth: {
  6. username: 'mikeymike',
  7. password: 'rapunz3l'
  8. }
  9. },

默认配置

  1. //获取按钮
  2. const btns = document.querySelectorAll('button');
  3. //默认配置
  4. axios.defaults.method = 'GET';//设置默认的请求类型为 GET
  5. axios.defaults.baseURL = 'http://localhost:3000';//设置基础 URL
  6. axios.defaults.params = {id:1};
  7. axios.defaults.timeout = 3000;//
  8. btns[0].onclick = function(){
  9. axios({
  10. url: '/posts'
  11. }).then(response => {
  12. console.log(response);
  13. })
  14. }

创建实例对象发送实例请求

  1. //创建实例对象 /getJoke
  2. const duanzi = axios.create({
  3. baseURL: 'https://api.apiopen.top',
  4. timeout: 2000
  5. });
  6. duanzi.get('/getJoke').then(response => {
  7. console.log(response.data)
  8. })

拦截器

  1. // Promise
  2. // 设置请求拦截器 config 配置对象
  3. axios.interceptors.request.use(function (config) {
  4. console.log('请求拦截器 成功 - 1号');
  5. //修改 config 中的参数
  6. config.params = {a:100};
  7. return config;
  8. }, function (error) {
  9. console.log('请求拦截器 失败 - 1号');
  10. return Promise.reject(error);
  11. });
  12. axios.interceptors.request.use(function (config) {
  13. console.log('请求拦截器 成功 - 2号');
  14. //修改 config 中的参数
  15. config.timeout = 2000;
  16. return config;
  17. }, function (error) {
  18. console.log('请求拦截器 失败 - 2号');
  19. return Promise.reject(error);
  20. });
  21. // 设置响应拦截器
  22. axios.interceptors.response.use(function (response) {
  23. console.log('响应拦截器 成功 1号');
  24. return response.data;
  25. // return response;
  26. }, function (error) {
  27. console.log('响应拦截器 失败 1号')
  28. return Promise.reject(error);
  29. });
  30. axios.interceptors.response.use(function (response) {
  31. console.log('响应拦截器 成功 2号')
  32. return response;
  33. }, function (error) {
  34. console.log('响应拦截器 失败 2号')
  35. return Promise.reject(error);
  36. });
  37. //发送请求
  38. axios({
  39. method: 'GET',
  40. url: 'http://localhost:3000/posts'
  41. }).then(response => {
  42. console.log('自定义回调处理成功的结果');
  43. console.log(response);
  44. });

request后进先执行

response先进先执行