axios入门基本利用方法

打印 上一主题 下一主题

主题 738|帖子 738|积分 2214

01 json-server的先容和服务器搭建

https://github.com/typicode/json-server
json-server的作用
1.快速搭建一个http服务,可以在30秒内不需要任何编码创建一个假的服务器
2.axios需要向服务端发送哀求,需要服务端联合axios
创建服务过程:
1.install
2.创建db.json
install
  1. npm install json-server
复制代码
run
  1. npx json-server db.json
复制代码

  1. json-server --watch db.json
复制代码
延长相应
  1. json-server --watch db.json
  2. -d 2000
复制代码
02 axios的先容及页面设置

https://github.com/axios/axios
定义

  • 基于Promise的http客户端,可以在浏览器和nodejs中运行
  • 在浏览器端借助axios可以发送ajax(XMLHttppRequests)哀求,在nodejs中借助axios可以发送http哀求
特点:毗连哀求和相应;对哀求和相应数据做转化;取消哀求;自动转化为json数据;掩护阻挡XSRF攻击
设置
1.利用npm
  1. $ npm install axios
复制代码
2.利用brower
  1. $ bower install axios
复制代码
3.利用yarn
和npm是一个意思
  1. $ yarn add axios
复制代码
4.利用CDN
在网页中举行引入
CDN 国内CDN网站: https://www.bootcdn.cn/
  1. <script src="https://cdn.bootcdn.net/ajax/libs/axios/1.5.0/axios.js"></script>
复制代码
03 axios的利用

基本利用-利用axios这个函数发送哀求
1.GET
  1. btns[0].onclick = function(){
  2.     //发送 AJAX 请求(axios返回Promise对象,所以用then方法指明成功的回调)
  3.     axios({
  4.         //请求类型
  5.         method: 'GET',
  6.         //URL
  7.         url: 'http://localhost:3000/posts/2',
  8.     }).then(response => {
  9.         // 获取结果
  10.         console.log(response);
  11.     });
  12. }
复制代码
2.POST
添加新内容 哀求体将内容传给服务器 json-server对内容保存
  1. //4-添加一篇新的文章 发送post请求
  2. btns[1].onclick = function(){
  3.     //发送 AJAX 请求
  4.     axios({
  5.         //请求类型
  6.         method: 'POST',
  7.         //URL
  8.         url: 'http://localhost:3000/posts',
  9.         //设置请求体
  10.         data: {
  11.             id: "3",
  12.             title: "今天天气不错, 还挺风和日丽的",
  13.             author: "张三"
  14.         }
  15.     }).then(response => {
  16.         console.log(response);
  17.     });
  18. }
复制代码
3.PUT
  1.         //更新数据 将id为3的文章更改内容
  2.         btns[2].onclick = function(){
  3.             //发送 AJAX 请求
  4.             axios({
  5.                 //请求类型
  6.                 method: 'PUT',
  7.                 //URL
  8.                 url: 'http://localhost:3000/posts/3',
  9.                 //设置请求体
  10.                 data: {
  11.                     title: "今天天气不错, 还挺风和日丽的",
  12.                     author: "李四"
  13.                 }
  14.             }).then(response => {
  15.                 console.log(response);
  16.             });
  17.         }
复制代码
4.delete
  1. //删除数据
  2. btns[3].onclick = function(){
  3.     //发送 AJAX 请求
  4.     axios({
  5.         //请求类型
  6.         method: 'delete',
  7.         //URL
  8.         url: 'http://localhost:3000/posts/3',
  9.     }).then(response => {
  10.         console.log(response);
  11.     });
  12. }
复制代码
其他利用:利用axios对象当中的一些方法来发送哀求
  1. //发送 GET 请求
  2. btns[0].onclick = function(){
  3.     // axios()
  4.     axios.request({
  5.         method:'GET',
  6.         url: 'http://localhost:3000/comments'
  7.     }).then(response => {
  8.         console.log(response);
  9.     })
  10. }
  11. //发送 POST 请求
  12. btns[1].onclick = function(){
  13.     // axios()
  14.     axios.post(
  15.         'http://localhost:3000/comments',
  16.         {
  17.             "body": "喜大普奔",
  18.             "postId": 2
  19.         }).then(response => {
  20.             console.log(response);
  21.         })
  22. }
复制代码
04 axios哀求相应结果的结构

Console
config 设置对象,包含哀求类型、url、哀求体
data 相应体的结果(服务器的相应结果)
headers 相应头信息
request 原生AJAX哀求
05 axios设置对象详细说明

axios(config)
设置项就是axios函数的参数
  1. {
  2.    // `url` 是用于请求的服务器 URL,设置给谁发送请求
  3.   url: '/user',
  4.   // `method` 是创建请求时使用的方法
  5.   method: 'get', // default
  6.   //   baseURL+url形成最终发送请求的路径结果
  7.   baseURL: 'https://some-domain.com/api/',
  8.   // `transformRequest` 允许在向服务器发送前,修改请求数据
  9.   // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
  10.   // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
  11.   transformRequest: [function (data, headers) {
  12.     // 对 data 进行任意转换处理
  13.     return data;
  14.   }],
  15.   // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
  16.   transformResponse: [function (data) {
  17.     // 对 data 进行任意转换处理
  18.     return data;
  19.   }],
  20.   // `headers` 是请求头信息,有时候需要进行身份校验
  21.   headers: {'X-Requested-With': 'XMLHttpRequest'},
  22.   // `params` 用于传递参数
  23.   // 必须是一个无格式对象(plain object)或 URLSearchParams 对象
  24.   params: {
  25.     ID: 12345
  26.   },
  27.    // `paramsSerializer` 是一个负责 `params` 序列化的函数 (用得少)
  28.   paramsSerializer: function(params) {
  29.     return Qs.stringify(params, {arrayFormat: 'brackets'})
  30.   },
  31.   // `data` 是作为请求主体被发送的数据
  32.   // 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'
  33.   // 在没有设置 `transformRequest` 时,必须是以下类型之一:
  34.   // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
  35.   // - 浏览器专属:FormData, File, Blob
  36.   // - Node 专属: Stream
  37.   data: {
  38.     firstName: 'Fred'
  39.   },
  40.   data: 'Country=Brasil&City=Belo Horizonte',//data有以上两种形式分别是json格式和表单格式
  41.   // 如果请求话费了超过 `timeout` 的时间,请求将被中断
  42.    timeout: 1000, // default is `0` (no timeout)
  43.    // `withCredentials` 表示跨域请求时是否写到Cookie
  44.   withCredentials: false, // default
  45.   // `adapter` 允许自定义处理请求,以使测试更轻松
  46.   // 返回一个 promise 并应用一个有效的响应 (查阅 [response docs](#response-api)).
  47.   //对请求的适配器做设置,两种:一种是AJAX,一种是在js中发送HTTP
  48.   adapter: function (config) {
  49.     /* ... */
  50.   },
  51. // `auth` 表示应该使用 HTTP 基础验证,并提供凭据
  52.   // 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头
  53.   auth: {
  54.     username: 'janedoe',
  55.     password: 's00pers3cret'
  56.   },
  57.    // `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
  58.   responseType: 'json', // default
  59.   // `responseEncoding` indicates encoding to use for decoding responses
  60.   // Note: Ignored for `responseType` of 'stream' or client-side requests
  61.   responseEncoding: 'utf8', // default
  62.    // `xsrfCookieName` 跨站请求标识,对cookie名字进行设置
  63.   xsrfCookieName: 'XSRF-TOKEN', // default
  64.   // `xsrfHeaderName`跨站请求标识,对头信息进行设置
  65.   xsrfHeaderName: 'X-XSRF-TOKEN', // default
  66.   //以上两个都是安全设置,保证请求来自自己的客户端,而不是来自未知其他页面,起到保护作用
  67.   
  68.   /*
  69.   ps:为什么起到保护作用?
  70.   服务器在返回结果的时候会返回一个唯一标识,下一次再发送请求的时候需要把标识传回去,服务器认证没有问题才会响应
  71.   */
  72.    // `onUploadProgress` 允许为上传处理进度事件
  73.   onUploadProgress: function (progressEvent) {
  74.     // Do whatever you want with the native progress event
  75.   },
  76.   // `onDownloadProgress` 允许为下载处理进度事件
  77.   onDownloadProgress: function (progressEvent) {
  78.     // 对原生进度事件的处理
  79.   },
  80.    // `maxContentLength` 定义允许的响应内容的最大尺寸(字节)
  81.   maxContentLength: 2000,
  82.   //`validateStatus` 对响应结果的成功做设置,返回true就是成功
  83.   validateStatus: function (status) {
  84.     return status >= 200 && status < 300; // default
  85.   },
  86.   // `maxRedirects` 定义在 node.js 中 follow 的最大重定向(跳转)数目
  87.   // 如果设置为0,将不会 follow 任何重定向
  88.   maxRedirects: 5, // default
  89.   // `socketPath` 设定Socket文件的位置,作用是向docker进程发送请求
  90.   socketPath: null, // default
  91.   // `httpAgent` 和 `httpsAgent` 分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项:
  92.   // `keepAlive` 默认没有启用
  93.   httpAgent: new http.Agent({ keepAlive: true }),
  94.   httpsAgent: new https.Agent({ keepAlive: true }),
  95.   // 'proxy' 定义代理服务器的主机名称和端口
  96.   // `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据
  97.   // 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。
  98.   proxy: {
  99.     host: '127.0.0.1',
  100.     port: 9000,
  101.     auth: {
  102.       username: 'mikeymike',
  103.       password: 'rapunz3l'
  104.     }
  105.   },
  106.   // `cancelToken` 指定用于取消请求的 cancel token
  107.   // (查看后面的 Cancellation 这节了解更多)
  108.   cancelToken: new CancelToken(function (cancel) {
  109.   })
  110. }
复制代码
06 axios的默认设置

  1. //默认配置
  2. axios.defaults.method = 'GET';//设置默认的请求类型为 GET
  3. axios.defaults.baseURL = 'http://localhost:3000';//设置基础 URL
  4. axios.defaults.params = {id:100};
  5. axios.defaults.timeout = 3000;
复制代码
07 axios创建实例对象

1-创建实例对象
  1. const demo = axios.create({
  2.     baseURL: 'https://api.apiopen.top',
  3.     timeout: 2000
  4. });
复制代码
2-利用实例对象


  • 利用设置对象调用哀求
  1. duanzi({
  2.     url: '/getJoke',
  3. }).then(response => {
  4.     console.log(response);
  5. });
复制代码


  • 利用封装函数来调用哀求
  1. duanzi.get('/getJoke').then(response => {
  2.     console.log(response.data)
  3. })
复制代码
08 axios拦截器

拦截器就是一些函数


  • 哀求拦截器:发送哀求之前用一些函数对哀求的参数和内容举行处理惩罚和检测,如果没有问题就发送哀求,如果有问题就停止发送哀求
  • 相应拦截器:在相应之前对结果做处理惩罚和检查
在哀求或相应被then或catch处理惩罚前拦截它们
1.拦截器的结构和正常执行顺序
  1. //与Promise相关
  2. // 添加请求拦截器 config就是配置项,结构参考上面的配置项说明
  3. axios.interceptors.request.use(function (config) {
  4.     console.log("请求拦截器 成功");
  5.     return config;
  6. }, function (error) {
  7.     // 对请求错误做些什么
  8.     console.log("请求拦截器 失败");
  9.     return Promise.reject(error);
  10. });
  11. // 添加响应拦截器 responce详情参考上面的响应结构
  12. axios.interceptors.response.use(function (response) {
  13.     console.log("响应拦截器 成功");
  14.     return response;
  15. }, function (error) {
  16.     // 对响应错误做点什么
  17.     console.log("响应拦截器 失败");
  18.     return Promise.reject(error);
  19. });
  20. //发送请求
  21. axios({
  22.     method : 'GET',
  23.     url:'http://localhost:3000/posts'  
  24. }).then(response =>{
  25.     console.log('自定义回调处理成功的结果');
  26. })
复制代码

2.当哀求拦截器发现参数出现问题时
  1. //与Promise相关
  2. // 添加请求拦截器 config就是配置项,结构参考上面的配置项说明
  3. axios.interceptors.request.use(function (config) {
  4.     console.log("请求拦截器 成功");
  5.     throw '参数出问题';
  6. }, function (error) {
  7.     // 对请求错误做些什么
  8.     console.log("请求拦截器 失败");
  9.     return Promise.reject(error);
  10. });
  11. // 添加响应拦截器 responce详情参考上面的响应结构
  12. axios.interceptors.response.use(function (response) {
  13.     console.log("响应拦截器 成功");
  14.     return response;
  15. }, function (error) {
  16.     // 对响应错误做点什么
  17.     console.log("响应拦截器 失败");
  18.     return Promise.reject(error);
  19. });
  20. //发送请求
  21. axios({
  22.     method : 'GET',
  23.     url:'http://localhost:3000/posts'  
  24. }).then(response =>{
  25.     console.log('自定义回调处理成功的结果');
  26. }).catch(response =>{
  27.     console.log('自定义失败回调');
  28. })
复制代码

3.当拥有两个拦截器,执行顺序是:哀求拦截器后进先执行,相应拦截器先辈先执行
  1. // 添加请求拦截器
  2. axios.interceptors.request.use(function (config) {
  3.     console.log("请求拦截器 成功 1号");
  4.     return config;
  5. }, function (error) {
  6.     console.log("请求拦截器 失败 1号");
  7.     return Promise.reject(error);
  8. });
  9. axios.interceptors.request.use(function (config) {
  10.     console.log("请求拦截器 成功 2号");
  11.     return config;
  12. }, function (error) {
  13.     console.log("请求拦截器 失败 2号");
  14.     return Promise.reject(error);
  15. });
  16. // 添加响应拦截器
  17. axios.interceptors.response.use(function (response) {
  18.     console.log("响应拦截器 成功 1号");
  19.     return response;
  20. }, function (error) {
  21.     console.log("响应拦截器 失败 1号");
  22.     return Promise.reject(error);
  23. });
  24. axios.interceptors.response.use(function (response) {
  25.     console.log("响应拦截器 成功 2号");
  26.     return response;
  27. }, function (error) {
  28.     console.log("响应拦截器 失败 2号");
  29.     return Promise.reject(error);
  30. });
  31. //发送请求
  32. axios({
  33.     method : 'GET',
  34.     url:'http://localhost:3000/posts'  
  35. }).then(response =>{
  36.     console.log('自定义回调处理成功的结果');
  37. }).catch(response =>{
  38.     console.log('自定义失败回调');
  39. })
复制代码

4.了解config参数和response参数


  • 在哀求拦截器当中可以对哀求参数config举行修改
  1. // 添加请求拦截器
  2. axios.interceptors.request.use(function (config) {
  3.     console.log("请求拦截器 成功");
  4.     //修改config中的参数
  5.     config.params={a:100};
  6.     config.timeout=2000;
  7.     return config;
  8. }, function (error) {
  9.     console.log("请求拦截器 失败");
  10.     return Promise.reject(error);
  11. });
复制代码



  • 在response返回的时间可以只返回自己想得到的内容
  1. // 添加响应拦截器
  2. axios.interceptors.response.use(function (response) {
  3.     console.log("响应拦截器 成功");
  4.     //只想得到响应体data
  5.     return response.data;
  6. }, function (error) {
  7.     console.log("响应拦截器 失败");
  8.     return Promise.reject(error);
  9. });
  10. //发送请求
  11. axios({
  12.     method : 'GET',
  13.     url:'http://localhost:3000/posts'  
  14. }).then(response =>{
  15.     console.log('自定义回调处理成功的结果');
  16.     //输出得到的response
  17.     console.log(response);
  18. }).catch(response =>{
  19.     console.log('自定义失败回调');
  20. })
复制代码
结果只得到了哀求体

09 axios取消哀求

官网示例:
  1. const CancelToken = axios.CancelToken;
  2. let cancel;
  3. axios.get('/user/12345', {
  4.   cancelToken: new CancelToken(function executor(c) {
  5.     // executor 函数接收一个 cancel 函数作为参数
  6.     cancel = c;
  7.   })
  8. });
  9. // cancel the request
  10. cancel();
复制代码
第一个按钮:发送哀求
第二个按钮:取消哀求
  1. //获取按钮
  2. const btns = document.querySelectorAll('button');
  3. //2.声明全局变量
  4. let cancel = null;
  5. //发送请求
  6. btns[0].onclick = function(){
  7.     //检测上一次的请求是否已经完成,如果没有完成直接取消重新发送
  8.     if(cancel !== null){
  9.         //取消上一次的请求
  10.         cancel();
  11.     }
  12.     axios({
  13.         method: 'GET',
  14.         url: 'http://localhost:3000/posts',
  15.         //1. 添加配置对象的属性
  16.         cancelToken: new axios.CancelToken(function(c){
  17.             //3. 将 c 的值赋值给 cancel
  18.             cancel = c;
  19.         })
  20.     }).then(response => {
  21.         console.log(response);
  22.         //将 cancel 的值初始化
  23.         cancel = null;
  24.     })
  25. }
  26. //绑定第二个事件取消请求
  27. btns[1].onclick = function(){
  28.     cancel();
  29. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

祗疼妳一个

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表