当前位置:   article > 正文

axios二次封装

axios二次封装

目录

第一章、前言

1.1 axios是什么

1.2 axios二次封装的原因

1.3 axios的特性

第二章、axios的二次封装

2.1 axios安装

2.2 axios封装一般步骤

2.3 axios封装常用的配置项

2.4 使用封装的axios

第一章、前言

1.1 axios是什么

  • 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,简单的理解就是ajax的封装
  • 在使用Vue.js框架开发前端项目时,会经常发送ajax请求服务端接口,在开发过程中 需要对axios进一步封装,方便在项目中的使用

1.2 axios二次封装的原因

  • 进行二次封装主要使用到的就是两个拦截器:
  • 请求拦截器:在发送请求之前处理一些公共的业务
  • 响应拦截器:当服务器数据响应之后又处理一些事情

1.3 axios的特性

  • 从浏览器中创建 XMLHttpRequest
  • 从 node.js 发出 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据

第二章、axios的二次封装

2.1 axios安装

npm install axios -S

2.2 axios封装一般步骤

  • 在项目根目录的src文件夹下新建一个utils文件夹(utils文件夹常用于放其他js插件)

  • 在文件夹下放request.js文件,在request.js中首先导入axios

 

  • 然后设置属性,比如baseURL(公共地址)和 timeOut (超时时间)
  • 还可以设置响应拦截和请求拦截,在请求拦截中经常设置loading动画的开启和配置请求头的token
  • 在响应拦截中可以关闭loading和根据后端返回的状态码检测token是否有效
  • 最后把requests(注意这里是我们创建的axios对象)暴露出来

大致代码:

  1. // 对于axios进行二次封装
  2. import axios from "axios";
  3. // 引入进度条
  4. import nprogress from "nprogress";
  5. // 引入进度条样式
  6. import "nprogress/nprogress.css"
  7. //在当前模块引入store
  8. import store from '@/store'
  9. //1、利用axios对象的方法create,去创建一个axios实例
  10. // 2、request就是axios,只不过稍微配置一下
  11. const requests = axios.create({
  12. // 配置对象
  13. // 基础路径,发请求时,路径会出现api
  14. baseURL:'/code',
  15. // 代表请求时间
  16. timeout:5000
  17. })
  18. // 请求拦截器:在请求之前,请求拦截器可以检测到,在发出去之前做一些事
  19. requests.interceptors.request.use((config)=>{
  20. // 进度条开始动
  21. nprogress.start()
  22. // console.log(1,store)
  23. if(store.state.detail.uuid_token){
  24. //请求一个头字段id
  25. config.headers.userTempId = store.state.detail.uuid_token
  26. }
  27. //判断需要携带token带给服务器、
  28. if(store.state.user.token){
  29. config.headers.token = store.state.user.token
  30. }
  31. return config;
  32. });
  33. // 响应拦截器
  34. requests.interceptors.response.use((res)=>{
  35. // 成功的回调函数
  36. // 进度条结束
  37. nprogress.done()
  38. return res.data;
  39. },(error)=>{
  40. // 失败的回调函数
  41. return Promise.reject(new Error('faile'));
  42. })
  43. // 暴露
  44. export default requests

2.3 axios封装常用的配置项

axios.create、axios.interceptors.request.use、axios.interceptors.response.use

Vue.js Ajax(axios) | 菜鸟教程

2.4 使用封装的axios

  • 在文件api根目录index.js文件使用:
  1. //引入
  2. import requests from "./request.js"; //路劲自己修改
  3. export const login = (params) => {
  4. return requests({
  5. url: "接口路径",
  6. method: "post" , //后端给什么写什么
  7. data: params
  8. })
  9. }

然后页面引用——

这里用到的就是vue中的store存储数据(注意这里只是示范,登录获取的token信息一般会永久存储在浏览器):

  1. import {login} from '@/api'
  2. const state ={
  3. //用户登录信息/token
  4. userLogin:"",
  5. }
  6. const mutations={
  7. GATLOGIN(state,value){
  8. state.userLogin = value
  9. },
  10. }
  11. const actions={
  12. async getLogin({commit}){
  13. //这里的data(用户登录账号密码)需要传参
  14. let result = await login(data);
  15. //console.log(result)
  16. if(result.code === 200){
  17. commit("GATLOGIN",result.data)
  18. //console.log(result.data)
  19. }
  20. },
  21. }
  22. const getters={
  23. }
  24. export default{
  25. state,
  26. mutations,
  27. actions,
  28. getters
  29. }
  • 如果目标是与数据库打通前后端(这里里面的传参数据是为了方便描述写的,具体需要分析)
  1. axios.get("http://localhost:8080/api/userLogin/userLoginlist(url路径)",{
  2. params:{
  3. userPassword:this.ruleForm.pass,
  4. userId:this.userId
  5. }
  6. }).then(
  7. res=>{
  8. this.$message({
  9. message:'用户信息修改成功',
  10. type:'success'
  11. })
  12. },
  13. error=>{
  14. console.log("b",error.message)
  15. }
  16. )
  1. axios.post('/axios-server',{
  2. username:'admin',//请求体
  3. password:'admin'
  4. },{
  5. params:{
  6. id:100,
  7. vip:7
  8. },
  9. })

axios请求:

AJAX及其相关知识应用(很详细)_❆VE❆的博客-CSDN博客

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

闽ICP备14008679号