当前位置:   article > 正文

axios进行二次封装_axios的二次封装

axios的二次封装

 Web开发中,我们最常用的HTTP库就是Axios了,它的底层基于Ajax进行封装,在浏览器端和服务端都可以使用。如果大家对一些API不是很熟悉可以参考官方地址,或者中文社区 

  为什么要对axios进行二次封装?

对Axios进行了二次封装,从而让我们更好地管理项目,把时间更多地放在业务开发上,节来省更多的时间


axios进行二次封装主要是要用到请求拦截器和响应拦截器;
请求拦截器可以在发请求之前可以处理一些业务
响应拦截器当服务器数据返回以后,可以处理一些事情

请求拦截器:

  1. instance.inteceptors.request.use(config=>{
  2. //不是登录接口,需要携带token
  3. if(config.url!=='/user/login'){
  4. config.headers.Authorization=token;
  5. }
  6. return config;
  7. },error=>{
  8. return Promise.reject(error)
  9. });

响应拦截器:

  1. instance.interceptors.response.use(response=>{
  2. //响应成功的回调
  3. let res=response.data;//后端返回的数据
  4. return res;
  5. },error=>{
  6. //响应失败的回调
  7. return Promise.reject(error)
  8. });

 快速创建一个名app的vue项目:

在项目路径下安装  Qs

 在项目路径下安装  axios

 

将app运行起来:

 

在src文件夹中创建一个utils文件夹(utils文件夹一般存放自己封装的工具类函数) 并创建一个request.js文件:

在request.js 文件写axios进行二次封装代码:

  1. // 导入axios
  2. import axios from "axios";
  3. // 导入 Qs
  4. import Qs from "qs";
  5. let qs=Qs;
  6. // 创建axios实例对象 instance
  7. let instance=axios.create({
  8. baseURL:"http://xx.xxx.xxx.xx:xxxx",
  9. timeout:5000
  10. });
  11. // 请求拦截器 interceptors
  12. instance.interceptors.request.use(config=>{
  13. //如果不是登录接口 需要携带token
  14. if(config.url!=='/user/login'){
  15. config.headers.Authorization='eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJNalU9Iiwic3ViIjoiYWRtaW4xIiwiaXNzIjoiMDk4ZjZiY2Q0NjIxZDM3M2NhZGU0ZTgzMjYyN2I0ZjYiLCJpYXQiOjE2NjQ5NTcxMTIsImF1ZCI6InJlc3RhcGl1c2VyIiwiZXhwIjoxNjY1MTI5OTEyLCJuYmYiOjE2NjQ5NTcxMTJ9.aaoYvqD9_rDoSjMeyyvBEt4TFyoMzOYWRi4iErQBUfw'
  16. }
  17. return config
  18. },error=>{
  19. return Promise.reject(error)
  20. });
  21. // 响应拦截器 interceptor-----对axios封装响应的数据做拦截
  22. instance.interceptors.response.use(response=>{
  23. let res=response.data;
  24. return res
  25. },error=>{
  26. return Promise.reject(error)
  27. });
  28. // 封装get方法
  29. export function get(url,params){
  30. return instance.get(url,{
  31. params,
  32. })
  33. }
  34. // 封装postJSON方法。 json格式的数据,一般用于登录接口
  35. export function postJSON(url,data){
  36. return instance.post(url,data);
  37. }
  38. // 封装post方法 表单格式的数据
  39. export function post(url,data){
  40. return instance.post(url,qs.stringify(data))
  41. }
  42. export default instance

AboutView.vue文件代码:

  1. <template>
  2. <div class="about">
  3. <h1>This is an about page</h1>
  4. <button @click="getSwipe">获取所有轮播图</button>
  5. </div>
  6. </template>
  7. <script>
  8. // 导入get方法
  9. import {get} from '../utils/request'
  10. export default{
  11. methods:{
  12. getSwipe(){
  13. get('/carousel/findAll').then(res=>{
  14. console.log(res,'获取后端响应');
  15. })
  16. }
  17. }
  18. }
  19. </script>

HomeView.vue代码:

  1. <template>
  2. <div class="home">
  3. <button @click="toLogin" >登录</button>
  4. </div>
  5. </template>
  6. <script>
  7. // @ is an alias to /src
  8. // 导入postJSON方法
  9. import {postJSON} from '../utils/request'
  10. export default {
  11. name: 'HomeView',
  12. data(){
  13. return{
  14. user:{
  15. username:"admin1",
  16. password:123321
  17. }
  18. }
  19. },
  20. methods:{
  21. async toLogin(){
  22. let res=await postJSON('/user/login',this.user);
  23. console.log(res);
  24. }
  25. }
  26. }
  27. </script>

点击登录按钮:

 点击获取所有轮播图按钮:

 

axios的特点:

1.基于promise的http库

2.可以调用promise的API

3.axios默认发送是get请求,发送的数据的默认格式是json格式

4.axios请求头的数据格式会自动转换。

5.axios将响应数据进行封装

6.axios是基于promise对ajax封装

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

闽ICP备14008679号