美文网首页
axios的二次封装

axios的二次封装

作者: 似朝朝我心 | 来源:发表于2022-03-21 00:26 被阅读0次
    • 创建vue项目
    • 安装axios
    npm i axios -S
    
    • 在src目录下创建一个名为api的目录,在api目录下创建一个request.js脚本。
    //对于原有的axios进行二次封装
    import axios from 'axios' //引入axios
    
    //1.利用axios对象的create方法去创建一个axios示例
    //2.request就是axios,只不过可以配置参数
    const requests = axios.create({
        //配置对象
        //baseURL 基础路径,发请求的时候,路径当中会出现api
        baseURL:"/api",
        timeout:5000 //请求超时超过5s代表请求失败
    })
    
    //请求拦截器:在发起请求之前,请求拦截器可以检测到,可以在请求发出去之前做一些事情
    //interceptors 拦截器的意思
    requests.interceptors.request.use((config)=>{
        //config 是一个配置对象,该对象里面有一个属性很重要,就是header请求头
        return config
    })
    
    //响应拦截器
    requests.interceptors.response.use((res) =>{
        //响应成功的回调函数,服务器响应数据回来后,响应拦截器可以检测到,可以做一些事情
        return res.data
    },(error) =>{
        //服务器响应失败的回调函数
        return Promise.reject(new Error('Faile'))
    })
    
    
    //对外暴露
    export default requests
    

    api接口的统一管理

    为什么api接口的需要统一管理?

    • 小项目:如果api接口只有一两个,完全可以在组件的生命周期created或者mounted里面发起axios请求。
    • 大项目:组件成百上千,层层依赖,单单接口就有几十个,而再利用生命周期发起请求就有点捉襟见肘了,为了方便后期的管理和维护,所以需要进行api接口的统一管理。

    操作:

    • 在api目录下创建一个index.js脚本。
    //对当前模块进行API统一管理
    import requests from "./request";
    
    //接口:/api/product/getBaseCategoryList  get请求 无参数
    //发请求:axios发请求返回结果Promise对象
    
    export const reqCategoryList = () => requests({url:'/api/product/getBaseCategoryList',method:'get'}) //箭头函数可以省去return 和{}
    

    跨域问题

    解决方案:JSONP、CROS、代理服务器

    • webpack配置代理服务器,官方文档搜proxy

    找到vue.config.js

    const { defineConfig } = require('@vue/cli-service')
    module.exports = defineConfig({
      transpileDependencies: true,
      lintOnSave:false,
    
    //配置代理服务器
      devServer: {
        proxy: {
          '/api': {
            target: 'http://39.98.123.211', //target:需要指向服务器的IP,而不是本地
            pathRewrite: { '^/api': '' }, //路径重新可以不需要,接口本身带/api
          },
        },
      },
    
    })
    

    重启项目

    相关文章

      网友评论

          本文标题:axios的二次封装

          本文链接:https://www.haomeiwen.com/subject/cchzdrtx.html