当前位置:   article > 正文

Axios学习笔记_xsrfcookiename

xsrfcookiename

Axios学习结构

Axios学习网址:起步 | Axios 中文文档 | Axios 中文网 (axios-http.cn)

1. Axios简介与特征

Axios简介 

  1. Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
  2. 该框架主要就是用来请求HTTP接口的,底层就是传说中的Ajax。
  3. axios的引言
  4. Axios 是一个 异步请求 技术
  5. 异步请求
  6. 基于XMLHttpRequest对象发起的请求都是异步请求
  7. 异步请求特点
  8. 请求之后页面不动,响应回来更新的是页面的局部,
  9. 多个请求之间互不影响,并行执行
  10. 系统架构 前后端分离架构系统   ---- 异步请求技术 ----->   Vue 全家桶系列

2. Axios基础入门

2.1 下载axios.js

网址:https://unpkg.com/axios/dist/axios.min.js

2.2 使用json-server创建接口

json-server用于Axios练习准备数据

  1. 1.使用npm install -g json-server 安装json-server
  2. 2.使用json-server --watch --port 3000 db.json 启动db.json

db.json数据准备

  1. {
  2.  "course": [
  3.   {
  4.      "id": 1000,
  5.      "course_name": "软件设计模式",
  6.      "autor": "张三老师"
  7.   },
  8.   {
  9.      "id": 1001,
  10.      "course_name": "JavaSE基础",
  11.      "autor": "王五老师"
  12.   }]
  13. }

2.3发起axios请求

  1. //发起Ajax请求
  2. axios({
  3.    //请求类型
  4.    method:'GET',//'POST','PUT','DELETE'
  5.    url:'http://localhost:8080/hello',
  6. }).then(response=>{
  7.    //请求成功时处理响应
  8. }).catch(error=>{
  9.    //请求失败时处理响应
  10. })

axios练习

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.    <meta charset="UTF-8">
  5.    <title>Axios练习1</title>
  6.    <script src="axios.js"></script>
  7. </head>
  8. <body>
  9.    <button class="btn1">按钮GET</button>
  10.    <button class="btn2">按钮POST</button>
  11. </body>
  12. <script>
  13.    let btn1=document.querySelector(".btn1");
  14.    let btn2=document.querySelector(".btn2");
  15.    btn1.onclick=function(){
  16.        //发送axios请求
  17.        axios({
  18.            //请求方式
  19.            methods:'GET',//可以是POST,DELETE等等
  20.            //URL
  21.            url:' http://localhost:3000/course',
  22.       }).then(response=>{
  23.            console.log(response);
  24.       }).catch(error=>{
  25.            console.log(error);
  26.       })
  27.   }
  28.    
  29.    btn2.onclick=function(){
  30.       //发送axios请求
  31.        axios({
  32.            //请求方式
  33.            method:'POST',
  34.            //URL
  35.            url:'http://localhost:3000/course',
  36.            //设置请求体
  37.            data:{
  38.                course_name:"SpringBoot框架学习",
  39.                author:"李四老师"
  40.           }
  41.       }).then(response=>{
  42.            console.log("0000");
  43.            console.log(response);
  44.       }).catch(error=>{
  45.            console.log(error);
  46.       })
  47.   }
  48. </script>
  49. </html>

3. Axios方法请求

3.1 get方法请求

  1. axios.get(url[,{参数}])
  2.     .then(response => {
  3.       在这里处理接口的正常响应
  4.     })
  5.     .catch(error => {
  6.       在这里处理接口的异常响应
  7.     })
  8.    
  9. 参数说明
  10.   url     请求API的地址
  11.   参数     我们可以在该参数里配置我们需要设置的params参数、headers参数等

3.2 post方法请求

  1. axios.post(url, body[,参数])
  2.     .then(response => {
  3.       在这里处理接口的正常响应
  4.     })
  5.     .catch(error => {
  6.       在这里处理接口的异常响应
  7.     })
  8.    
  9. 参数说明
  10.   body   也叫“请求体”,我们一般就把需要传递的参数放到请求休里面,通常“请求体”一般为json格式。

GET&&POST

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.    <meta charset="UTF-8">
  5.    <title>Axios练习2</title>
  6.    <script src="axios.js"></script>
  7. </head>
  8. <body>
  9.    <button class="btn1">按钮GET</button>
  10.    <button class="btn2">按钮POST</button>
  11. </body>
  12. <script>
  13.    let btn1=document.querySelector(".btn1");
  14.    let btn2=document.querySelector(".btn2");
  15.    btn1.onclick=function(){
  16.        axios.get('http://localhost:3000/course')
  17.             .then(response=>{
  18.                 console.log(response);
  19.             })
  20.             .catch(error=>{
  21.                console.log(error);
  22.             })
  23.   }
  24.    btn2.onclick=function(){
  25.       axios.post('http://localhost:3000/course',{
  26.            course_name:"Vue框架学习",
  27.            author:"李玲老师"
  28.       }).then(response=>{
  29.            console.log(response);
  30.       }).catch(error=>{
  31.            console.log(error);
  32.       })
  33.   }
  34. </script>
  35. </html>

4. Axios实例

4.1 实例练习

  1. const axiosInstance=axios.create({
  2. //设置一些配置如:baseURL,tiemout
  3. })

axios实例练习

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.    <meta charset="UTF-8">
  5.    <title>Axios练习1</title>
  6.    <script src="axios.js"></script>
  7. </head>
  8. <body>
  9.    <button class="btn1">按钮GET请求一个接口</button>
  10.    <button class="btn2">按键GET请求另一个接口</button>
  11. </body>
  12. <script>
  13.    let btn1=document.querySelector(".btn1");
  14.    let btn2=document.querySelector(".btn2");
  15.    // 创建axios实例request1
  16.    const request1=axios.create({
  17.        baseURL:'http://localhost:3000',
  18.   })
  19.    
  20.    btn1.onclick=function(){
  21.        request1.get('/course')
  22.       .then(response=>{
  23.            console.log(response);
  24.       }).catch(error=>{
  25.            console.log(error);
  26.       })
  27.   }
  28.    btn2.onclick=function(){
  29.        request1.get('/student')
  30.       .then(response=>{
  31.            console.log(response);
  32.       }).catch(error=>{
  33.            console.log(error);
  34.       })
  35.   }
  36. </script>
  37. </html>

4.2 实例方法

以下是可用的实例方法。指定的配置将与实例的配置合并。

axios#request(config)
axios#get(url[, config])
axios#delete(url[, config])
axios#head(url[, config])
axios#options(url[, config])
axios#post(url[, data[, config]])
axios#put(url[, data[, config]])
axios#patch(url[, data[, config]])
axios#getUri([config])

5. Axios默认配置

5.1 axios官网配置

  1. {
  2.  // `url` 是用于请求的服务器 URL
  3.  url: '/user',
  4.  // `method` 是创建请求时使用的方法
  5.  method: 'get', // 默认值
  6.  // `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
  7.  // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
  8.  baseURL: 'https://some-domain.com/api/',
  9.  // `transformRequest` 允许在向服务器发送前,修改请求数据
  10.  // 它只能用于 'PUT', 'POST' 和 'PATCH' 这几个请求方法
  11.  // 数组中最后一个函数必须返回一个字符串, 一个Buffer实例,ArrayBuffer,FormData,或 Stream
  12.  // 你可以修改请求头。
  13.  transformRequest: [function (data, headers) {
  14.    // 对发送的 data 进行任意转换处理
  15.    return data;
  16. }],
  17.  // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
  18.  transformResponse: [function (data) {
  19.    // 对接收的 data 进行任意转换处理
  20.    return data;
  21. }],
  22.  // 自定义请求头
  23.  headers: {'X-Requested-With': 'XMLHttpRequest'},
  24.  // `params` 是与请求一起发送的 URL 参数
  25.  // 必须是一个简单对象或 URLSearchParams 对象
  26.  params: {
  27.    ID: 12345
  28. },
  29.  // `paramsSerializer`是可选方法,主要用于序列化`params`
  30.  // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
  31.  paramsSerializer: function (params) {
  32.    return Qs.stringify(params, {arrayFormat: 'brackets'})
  33. },
  34.  // `data` 是作为请求体被发送的数据
  35.  // 仅适用 'PUT', 'POST', 'DELETE 和 'PATCH' 请求方法
  36.  // 在没有设置 `transformRequest` 时,则必须是以下类型之一:
  37.  // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
  38.  // - 浏览器专属: FormData, File, Blob
  39.  // - Node 专属: Stream, Buffer
  40.  data: {
  41.    firstName: 'Fred'
  42. },
  43.  
  44.  // 发送请求体数据的可选语法
  45.  // 请求方式 post
  46.  // 只有 value 会被发送,key 则不会
  47.  data: 'Country=Brasil&City=Belo Horizonte',
  48.  // `timeout` 指定请求超时的毫秒数。
  49.  // 如果请求时间超过 `timeout` 的值,则请求会被中断
  50.  timeout: 1000, // 默认值是 `0` (永不超时)
  51.  // `withCredentials` 表示跨域请求时是否需要使用凭证
  52.  withCredentials: false, // default
  53.  // `adapter` 允许自定义处理请求,这使测试更加容易。
  54.  // 返回一个 promise 并提供一个有效的响应 (参见 lib/adapters/README.md)。
  55.  adapter: function (config) {
  56.    /* ... */
  57. },
  58.  // `auth` HTTP Basic Auth
  59.  auth: {
  60.    username: 'janedoe',
  61.    password: 's00pers3cret'
  62. },
  63.  // `responseType` 表示浏览器将要响应的数据类型
  64.  // 选项包括: 'arraybuffer', 'document', 'json', 'text', 'stream'
  65.  // 浏览器专属:'blob'
  66.  responseType: 'json', // 默认值
  67.  // `responseEncoding` 表示用于解码响应的编码 (Node.js 专属)
  68.  // 注意:忽略 `responseType` 的值为 'stream',或者是客户端请求
  69.  // Note: Ignored for `responseType` of 'stream' or client-side requests
  70.  responseEncoding: 'utf8', // 默认值
  71.  // `xsrfCookieName` 是 xsrf token 的值,被用作 cookie 的名称
  72.  xsrfCookieName: 'XSRF-TOKEN', // 默认值
  73.  // `xsrfHeaderName` 是带有 xsrf token 值的http 请求头名称
  74.  xsrfHeaderName: 'X-XSRF-TOKEN', // 默认值
  75.  // `onUploadProgress` 允许为上传处理进度事件
  76.  // 浏览器专属
  77.  onUploadProgress: function (progressEvent) {
  78.    // 处理原生进度事件
  79. },
  80.  // `onDownloadProgress` 允许为下载处理进度事件
  81.  // 浏览器专属
  82.  onDownloadProgress: function (progressEvent) {
  83.    // 处理原生进度事件
  84. },
  85.  // `maxContentLength` 定义了node.js中允许的HTTP响应内容的最大字节数
  86.  maxContentLength: 2000,
  87.  // `maxBodyLength`(仅Node)定义允许的http请求内容的最大字节数
  88.  maxBodyLength: 2000,
  89.  // `validateStatus` 定义了对于给定的 HTTP状态码是 resolve 还是 reject promise。
  90.  // 如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`),
  91.  // 则promise 将会 resolved,否则是 rejected。
  92.  validateStatus: function (status) {
  93.    return status >= 200 && status < 300; // 默认值
  94. },
  95.  // `maxRedirects` 定义了在node.js中要遵循的最大重定向数。
  96.  // 如果设置为0,则不会进行重定向
  97.  maxRedirects: 5, // 默认值
  98.  // `socketPath` 定义了在node.js中使用的UNIX套接字。
  99.  // e.g. '/var/run/docker.sock' 发送请求到 docker 守护进程。
  100.  // 只能指定 `socketPath` 或 `proxy` 。
  101.  // 若都指定,这使用 `socketPath` 。
  102.  socketPath: null, // default
  103.  // `httpAgent` and `httpsAgent` define a custom agent to be used when performing http
  104.  // and https requests, respectively, in node.js. This allows options to be added like
  105.  // `keepAlive` that are not enabled by default.
  106.  httpAgent: new http.Agent({ keepAlive: true }),
  107.  httpsAgent: new https.Agent({ keepAlive: true }),
  108.  // `proxy` 定义了代理服务器的主机名,端口和协议。
  109.  // 您可以使用常规的`http_proxy` 和 `https_proxy` 环境变量。
  110.  // 使用 `false` 可以禁用代理功能,同时环境变量也会被忽略。
  111.  // `auth`表示应使用HTTP Basic auth连接到代理,并且提供凭据。
  112.  // 这将设置一个 `Proxy-Authorization` 请求头,它会覆盖 `headers` 中已存在的自定义 `Proxy-Authorization` 请求头。
  113.  // 如果代理服务器使用 HTTPS,则必须设置 protocol 为`https`
  114.  proxy: {
  115.    protocol: 'https',
  116.    host: '127.0.0.1',
  117.    port: 9000,
  118.    auth: {
  119.      username: 'mikeymike',
  120.      password: 'rapunz3l'
  121.   }
  122. },
  123.  // see https://axios-http.com/zh/docs/cancellation
  124.  cancelToken: new CancelToken(function (cancel) {
  125. }),
  126.  // `decompress` indicates whether or not the response body should be decompressed
  127.  // automatically. If set to `true` will also remove the 'content-encoding' header
  128.  // from the responses objects of all decompressed responses
  129.  // - Node only (XHR cannot turn off decompression)
  130.  decompress: true // 默认值
  131. }

5.2 axios配置练习

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.    <meta charset="UTF-8">
  5.    <title>Axios练习3</title>
  6.    <script src="axios.js"></script>
  7. </head>
  8. <body>
  9.    <button class="btn1">按钮GET请求</button>
  10. </body>
  11. <script>
  12.    /*
  13.   axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
  14. axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
  15.   */
  16.    let btn1=document.querySelector(".btn1");
  17.    axios.defaults.method='GET';
  18.    axios.defaults.baseURL='http://localhost:3000';
  19.    btn1.onclick=function(){
  20.        axios({
  21.            url:'/student'
  22.       }).then(response=>{
  23.            console.log(response);
  24.       })
  25.   }
  26. </script>
  27. </html>

响应结构

  1. {
  2.  // `data` 由服务器提供的响应
  3.  data: {},
  4.  // `status` 来自服务器响应的 HTTP 状态码
  5.  status: 200,
  6.  // `statusText` 来自服务器响应的 HTTP 状态信息
  7.  statusText: 'OK',
  8.  // `headers` 是服务器响应头
  9.  // 所有的 header 名称都是小写,而且可以使用方括号语法访问
  10.  // 例如: `response.headers['content-type']`
  11.  headers: {},
  12.  // `config` 是 `axios` 请求的配置信息
  13.  config: {},
  14.  // `request` 是生成此响应的请求
  15.  // 在node.js中它是最后一个ClientRequest实例 (in redirects),
  16.  // 在浏览器中则是 XMLHttpRequest 实例
  17.  request: {}
  18. }
  1. axios.get('/student')
  2. .then(function (response) {
  3.    console.log(response.data);
  4.    console.log(response.status);
  5.    console.log(response.statusText);
  6.    console.log(response.headers);
  7.    console.log(response.config);
  8. });

6. Axios拦截器

6.1 请求拦截器

axios.interceptors.request.use

6.2 响应拦截器

axios.interceptors.response.use

  1. // 添加请求拦截器
  2. axios.interceptors.request.use(function (config) {
  3.    // 在发送请求之前做些什么
  4.    return config;
  5. }, function (error) {
  6.    // 对请求错误做些什么
  7.    return Promise.reject(error);
  8. });
  9. // 添加响应拦截器
  10. axios.interceptors.response.use(function (response) {
  11.    // 2xx 范围内的状态码都会触发该函数。
  12.    // 对响应数据做点什么
  13.    return response;
  14. }, function (error) {
  15.    // 超出 2xx 范围的状态码都会触发该函数。
  16.    // 对响应错误做点什么
  17.    return Promise.reject(error);
  18. });

响应器

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.    <meta charset="UTF-8">
  5.    <title>Axios练习4</title>
  6.    <script src="axios.js"></script>
  7. </head>
  8. <body>
  9.    <button class="btn1">按钮GET请求</button>
  10. </body>
  11. <script>
  12.    let btn1=document.querySelector(".btn1");
  13.    axios.defaults.method='GET';
  14.    axios.defaults.baseURL='http://localhost:3000';
  15.        // 添加请求拦截器
  16.    axios.interceptors.request.use(function (config) {
  17.        // 在发送请求之前做些什么
  18.        console.log("请求成功");
  19.        return config;
  20.   }, function (error) {
  21.        // 对请求错误做些什么
  22.        return Promise.reject(error);
  23.   });
  24.    // 添加响应拦截器
  25.    axios.interceptors.response.use(function (response) {
  26.        // 对响应数据做点什么
  27.        console.log("响应成功");
  28.        return response;
  29.   }, function (error) {
  30.        // 对响应错误做点什么
  31.        return Promise.reject(error);
  32.   });
  33.    btn1.onclick=function(){
  34.        axios({
  35.            url:'/student'
  36.       }).then(response=>{
  37.            console.log(response);
  38.       })
  39.   }
  40. </script>
  41. </html>

6.3 axios实例拦截器

  1. const instance = axios.create();
  2. instance.interceptors.request.use(function () {/*...*/});

7. Axios并发请求

  1. function getUserAccount() {
  2.  return axios.get('/user/12345');
  3. }
  4. function getUserPermissions() {
  5.  return axios.get('/user/12345/permissions');
  6. }
  7. Promise.all([getUserAccount(), getUserPermissions()])
  8. .then(function (results) {
  9.    const acct = results[0];
  10.    const perm = results[1];
  11. });

8. Axios错误处理

  1. catch(error=>{
  2.    //错误处理
  3.    
  4.    //使用 validateStatus 配置选项,可以自定义抛出错误的 HTTP code。
  5.    validateStatus: function (status) {
  6.   return status < 500; // 处理状态码小于500的情况
  7. }
  8.    
  9.    //使用 toJSON 可以获取更多关于HTTP错误的信息。
  10.    console.log(error.toJSON);
  11. })

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/615594
推荐阅读
相关标签
  

闽ICP备14008679号