• Nuxt插件-axios封装


    1. 插件机制干嘛的?

    • nuxt提供插件, 是对已有的程序进行增强或控制。

    1.1 编写插件步骤

    1.1.1 步骤一:

    在/plugins/目录下创建js文件

    img

    img

    1.1.2 步骤二:

    在nuxt.config.js文件中进行注册my.js

    img

    /**漫路*/
    plugins: [
        {src:'~/plugins/my.js'}
      ],
    

    1.1.3 步骤三:

    随便访问任何组件查看控制台,快捷键:F12

    img

    我们可以看到输出了两次
    第一次是我们以前经常看到的样子
    第二次在Nuxt SSR中输出的
    

    1.1.3.1 所以为什么会这样呢???

    因为使用的SSR技术, 前端分成了前端客户端和前端服务端
    当然了这个也是可以处理的, 需要在我们步骤二中进行配置
    

    1.1.3.2 插件配置权限

    img

    /**
    *mode属性: 
    * 不写mode属性, 表示前端客户端和前端服务端都生效
    * mode: 'client'   表示是仅在前端客户端生效
    * mode: 'server'   表示是仅在前端服务端生效
    */
    export default {
      plugins: [
        { src: '~/plugins/my.js' },
        { src: '~/plugins/my1.js', mode: 'client' },
        { src: '~/plugins/my2.js', mode: 'server' }
      ]
    }
    

    2. 自定义axios

    • 自定义axios的目的: 编写一个api.js, 用于统一维护请求路径,便于程序员开发

    2.1 步骤一:

    修改nuxt.config.js , 编写axios baseURL

    img

    2.2 步骤二:

    创建/plugins/api.js文件, 并在nuxt.config.js文件进行配置(仅前端客户端可用)

    • 创建api.js文件

    img

    • nuxt.config.js配置内容

    img

    plugins: [
        // { src: '~/plugins/my.js' },
        // { src: '~/plugins/my.js',mode: 'client' },
        {src:'~/plugins/my.js',mode:'server'},
        {src:'~/plugins/api.js',mode:'client'}
      ],
    

    2.3 步骤三:

    修改api.js , 将下面的代码拷贝到api.js文件中即可

    //1) 自定义函数
    const request = {
      testGet : (params) => {
        return axios.get('/web-service/testGet',{
          params
        })
      },
      testPost : (params) => {
        return axios.get('/web-service/testPost',params)
      },
      //......
    }
    
    //2) 定义axios变量等待接收axios,保证axios可用
    var axios = null
    export default ({ $axios }, inject) => {
    
      //3 保存内置的axios
      axios = $axios
    
      //4) 将自定义函数交于nuxt
      inject('request', request)
    }
    
    • 使用方式
      // 使用方式1:在vue中,this.$request.函数名()
      // 使用方式2:在nuxt的asyncData中,content.app.$request.函数名()
    

    2.4 步骤四:

    在其它组件中发送ajax

    <template>
      <div>
    	测试axios
      </div>
    </template>
    
    <script>
    export default {
      //页面加载成功
      async mounted() {
        //发送ajax
        let baseResult = await this.$request.findAll()
        console.info( baseResult )
      },
    }
    </script>
    
    <style>
    </style>
    

    2.5 步骤五:

    在api.js编写具体的功能

    //自定义函数
    const request = {
      testGet : (params) => {
        return axios.get('/web-service/testGet',{
          params
        })
      },
      testPost : (params) => {
      //axios.post('接口路径',参数)
        return axios.post('/web-service/testPost',params)
      },
      //...自定义函数就不一一举例了...
      //方法名 : 函数
      findAll : () => {
        return axios.get('/userservice/user/list')
      }
    }
    

    2.6 插入: asyncData中使用axios

    如果需要在asyncData中使用自定义axios,需要修改如下配置:

    • 1.修改nuxt.config.js配置文件

    使其支持前端服务器端调用

    img

      1. 其它组件中调用时的写法
    <template>
      <div>
      {{myResponse}}
      </div>
    </template>
    
    <script>
    export default {
      //页面加载成功 (前端客户端执行)
      async mounted() {
        //发送ajax
        let baseResult = await this.$request.findAll()
    
        console.info( baseResult )
      },
      // 前端服务端执行
      async asyncData( context ) {
        let baseResult = await context.app.$request.findAll()
        return {
          myResponse : baseResult.data
        }
      },
    }
    </script>
    
    <style>
    </style>
    

    3. 自定义axios原理分析图

    img

  • 相关阅读:
    任正非用人:砍掉高层手脚、中层屁股、基层脑袋、全身赘肉!
    SourceTree的基本使用
    Spring学习(三)
    Spring学习(二)
    Spring学习(一)
    SpringBoot学习(五)
    SpringBoot学习(四)
    SpringBoot学习(二)
    SpringBoot学习(三)
    SpringBoot学习(一)
  • 原文地址:https://www.cnblogs.com/ajaemp/p/12710669.html
Copyright © 2020-2023  润新知