Nuxt中插件机制(整合axios示例原理分析)

news/2024/7/10 2:02:49 标签: vue, Nuxt

文章目录

  • 1. 插件机制干嘛的?
    • 1.1 编写插件步骤
      • 1.1.1 步骤一:
      • 1.1.2 步骤二:
      • 1.1.3 步骤三:
        • 1.1.3.1 所以为什么会这样呢???
        • 1.1.3.2 插件配置权限
  • 2. 自定义axios
    • 2.1 步骤一:
    • 2.2 步骤二:
    • 2.3 步骤三:
    • 2.4 步骤四:
    • 2.5 步骤五:
    • 2.6 插入: asyncData中使用axios
  • 3. 自定义axios原理分析图

1. 插件机制干嘛的?

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

1.1 编写插件步骤

1.1.1 步骤一:

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

1.1.2 步骤二:

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

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

1.1.3 步骤三:

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

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

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

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

1.1.3.2 插件配置权限

/**
*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

2.2 步骤二:

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

  • 创建api.js文件

  • nuxt.config.js配置内容

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

vue"><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编写具体的功能

vue">//自定义函数
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配置文件

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

    1. 其它组件中调用时的写法
vue"><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原理分析图


http://www.niftyadmin.cn/n/625810.html

相关文章

JRebel无法启动问题 Application Server was not connected before run configuration stop

因为更改xml这样的代码后重启项目太麻烦了,所以安装了一下JRebel插件。 启动错误 但是安装完成后&#xff0c;启动不起来&#xff0c;出现如下错误&#xff1a; Application Server was not connected before run configuration stop, reason: Unable to ping server at loca…

Java实现pdf文件转图片

Java实现pdf文件转换为图片 可根据自己的逻辑进行修改 pom依赖 <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --> <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version&…

Spring Async 异步任务的使用

异步任务的使用 可用于定时发送通知等业务逻辑 新增asyncTask配置类 import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync;import java.u…

查询当前数据库所有表基本信息

#2020云栖大会#阿里云海量offer来啦&#xff01;投简历、赢阿里云限量礼品及阿里云ACA认证免费考试资格&#xff01;>>> SELECT* FROMinformation_schema.TABLES WHEREtable_schema ( SELECT DATABASE ())

Linux系统开发常用命令

方便自己看–长期维护 文章目录ls 查看目录内容cd 目录切换rm 删除(目录|文件)mkdir 创建目录cp 复制(目录|文件)mv 剪切(目录|文件) 可重命名tar.gz格式压缩包zip格式ls 查看目录内容 ls -a 列出目录所有文件&#xff0c;包含以.开始的隐藏文件 ls -A 列出除.及..的其它文件 l…

Sql通过存储过程生成全年日历考勤表数据

#2020云栖大会#阿里云海量offer来啦&#xff01;投简历、赢阿里云限量礼品及阿里云ACA认证免费考试资格&#xff01;>>> 需求: 生成考勤日历表 CREATE TABLE year_date_all (id int primary key AUTO_INCREMENT COMMENT id,repDate date NOT NULL COMMENT 日期,repY…

Java封装简体繁体(香港台湾)转换工具

简体繁体转换 新建工具类:HKTWwordVO import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.HashSet; import ja…

解决: Vue报错 Cannot find element: #app

原因&#xff1a; 在html没有加载完成时&#xff0c;加载了js&#xff0c;导致js找不到vue对应的id&#xff0c;所以报错 解决&#xff1a; 将对应js放到html最后引用即可