vue3.0-axios拦截器、proxy跨域代理

news2024/11/17 23:55:51

目录

1. vue-cli

1)vue-cli

2)安装vue-cli

①解决Windows PowerShell不识别vue命令的问题

3)创建项目

4)基于vue ui创建vue项目 

 5)基于命令行创建vue项目

2. 组件库 

1)vue组件库

2)vue组件库和bootstrap的区别

3)最常用的vue组件库

4)ELement UI

①在vue2的项目中安装element-ui

②引入element-ui

③完整引入

④按需引入

⑤把组件的导入和注册封装为独立的模块

3. axios拦截器 ​​​​​​​ 

1)在vue3的项目中全局配置axios

2)在vue2的项目中全局配置axios

3)拦截器

​4)配置请求拦截器

①请求拦截器-Token认证

②请求拦截器-展示Loading效果

5)配置响应拦截器

①响应拦截器-关闭Loading效果

4. proxy跨域代理

1)接口的跨域问题

2)通过代理解决接口的跨域问题

3)在项目中配置proxy代理


1. vue-cli

1)vue-cli

vue-cli(vue脚手架)是vue官方提供的、快速生成vue工程化项目的工具。

官方首页:Vue CLI

特点:

  1. 开箱即用
  2. 基于webpack
  3. 功能丰富且易于扩展
  4. 支持创建vue2和vue3的项目

2)安装vue-cli

vue-cli是基于Node.js开发出来的工具,因此需要使用npm将它安装为全局可用的工具:

①解决Windows PowerShell不识别vue命令的问题

3)创建项目

4)基于vue ui创建vue项目 

步骤1:在终端下运行vue ui命令,自动在浏览器中打开创建项目的可视化面板:

步骤2:在详情页面填写项目名称:

 步骤3:在预设页面选择手动配置项目

步骤4:在功能页面勾选需要安装的功能(Choose Vue Version、Babel、CS预处理器、使用配置文件)

  

步骤5:在配置页面勾选vue版本和需要预处理器

  

步骤6:将刚才所有的配置保存为预设(模板),方便下一次创建项目时直接复用之前的配置:

  

步骤7: 创建项目并自动安装依赖包:

vue ui的本质:通过可视化的面板采集到用户的配置信息后,在后台基于命令行的方式自动初始化项目: 

 项目创建完成后,自动进入项目仪表盘:

 5)基于命令行创建vue项目

步骤1:在终端下运行vue create demo2命令,基于交互式的命令行创建vue的项目

步骤2:选择要安装的功能

步骤3:使用上下箭头选择vue的版本,并使用回车键确认选择

步骤4:使用上下箭头选择要使用的CSS预处理器,并使用回车键确认选择

步骤5:使用上下箭头选择如何存储插件的配置信息,并使用回车键确认选择

步骤6:是否将刚才的配置保存为预设

步骤7:选择如何安装项目中的依赖包:npm

 步骤8:开始创建项目并自动安装依赖包:

  

2. 组件库 

1)vue组件库

开发者可以把自己封装的vue组件整理、打包、并发布为npm的包,从而供其他人下载和使用,这种可以直接下载并在项目中使用的现成组件,就叫做vue组件库

2)vue组件库和bootstrap的区别

二者之间存在本质的区别:

  • bootstrap只提供的纯粹的原材料(CSS样式、HTML结构以及JS特效),需要由开发者做进一步的组装和改造
  • vue组件库是遵循vue语法、高度定制的现成组件,开箱即用

3)最常用的vue组件库

PC端:

  • ElementUI:Element - The world's most popular Vue UI framework
  • View UI:iView - A high quality UI Toolkit based on Vue.js

移动端:

  • Mint UI:Mint UI
  • Vant:Vant 3 - Mobile UI Components built on Vue

4)ELement UI

Element UI是饿了么前端团队开源的一套PC端vue组件库。支持在vue2和vue3的项目中使用:

  • vue2:Element - The world's most popular Vue UI framework
  • vue3:一个 Vue 3 UI 框架 | Element Plus

①在vue2的项目中安装element-ui

运行终端命令 npm i element-ui -S

②引入element-ui

开发者可以一次性完整引入所有的element-ui组件,或是根据需求,只按需引入用到的element-ui组件:

  • 完整引入:操作简单,但是会额外引入一些用不到的组件,导致项目体积过大
  • 按需引入:操作相对复杂一些,但是只会引入用到的组件,能起到优化项目体积的目的

③完整引入

在main.js中写入以下内容:

import Vue from 'vue'
import App from './App.vue'

// 1.完整引入element ui的组件
import ElementUI from 'element-ui'
// 2.导入element ui组件的样式
import 'element-ui/lib/theme-chalk/index.css'

// 3.把ElementUI注册为vue组件,注册之后即可在每个组件中直接使用element ui的组件
Vue.use(ElementUI)

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

④按需引入

借助babel-plugin-component,可以只引入需要的组件,以达到减小项目提及的目的。

  1. 安装babel-plugin-component:npm install babel-plugin-component -D
  2. 修改根目录下的babel.config.js配置文件,新增plugin节点:
    module.exports = {
      presets: [
        '@vue/cli-plugin-babel/preset'
      ],
      "plugins": [
        [
          "component",
          {
            "libraryName": "element-ui",
            "styleLibraryName": "theme-chalk"
          }
        ]
      ]
    }
    
  3. 只希望引入部分组件,比如Button,那么需要在main.js中写入:
    import { Button } from 'element-ui'
    
    Vue.use(Button)

⑤把组件的导入和注册封装为独立的模块

在src目录下新建element-ui/index.js模块,并声明如下的代码: 

3. axios拦截器 ​​​​​​​ 

1)在vue3的项目中全局配置axios

2)在vue2的项目中全局配置axios

需要在main.js入口文件中,通过Vue构造函数的prototype原型对象全局配置axios:

// 1.导入axios
import axios from 'axios'

// 2.配置请求根路径
axios.defaults.baseURL = 'https://www.escook.cn'
// 3.通过Vue构造函数的原型对象,全局配置axios
Vue.prototype.$http = axios

3)拦截器

拦截器(Interceptors)会在每次发起ajax请求得到响应的时候自动被触发。

应用场景:

  1. Token身份认证
  2. Loading效果
  3. 等等

4)配置请求拦截器

通过axios.interceptors.request.use(成功的回调,失败的回调)可以配置请求拦截器。

注意:失败的回调可以被省略。

①请求拦截器-Token认证

// 1.导入axios
import axios from 'axios'

// 2.配置请求根路径
axios.defaults.baseURL = 'https://www.escook.cn'

// 配置请求拦截器
axios.interceptors.request.use(config => {
  // 为当前请求配置Token认证字段
  config.headers.Authorization = 'Bearer xxx'
  console.log(config);
  return config
})

// 3.通过Vue构造函数的原型对象,全局配置axios
Vue.prototype.$http = axios

结果为: 

②请求拦截器-展示Loading效果

借助于element ui提供的Loading效果组件(Element - The world's most popular Vue UI framework)可以方便的实现Loading效果的展示。

// 1)按需导入Loading效果组件
import { Loading } from 'element-ui'
// 2)声明变量,用来存储Loading组件的实例对象
let loadingInstance = null


// 配置请求拦截器
axios.interceptors.request.use(config => {
  // 3)调用Loading组件的service()方法,创建Loading组件的实例,并全屏展示Loading效果
  loadingInstance = Loading.service({ fullscreen: true })
  return config
})

5)配置响应拦截器

通过axios.interceptors.response.use(成功的回调,失败的回调)可以配置响应拦截器。

注意:失败的回调可以被省略。

 

①响应拦截器-关闭Loading效果

调用Loading实例提供的close()方法即可关闭Loading效果。

// 响应拦截器
axios.interceptors.response.use(response => {
  // 调用Loading实例的close方法即可关闭Loading效果
  loadingInstance.close()
  return response
})

4. proxy跨域代理

1)接口的跨域问题

vue项目运行的地址:http://localhost:8080/

API接口运行的地址:https://www.escook.cn/api/users

由于当前的API接口没有开启CDRS跨域资源共享,因此默认情况下,上面的接口无法请求成功。

 

2)通过代理解决接口的跨域问题

通过vue-cli创建的项目在遇到接口跨域问题时,可以通过代理的方式来解决:

  1. 把axios的请求根路径设置为vue项目的运行地址(接口请求不再跨域)
  2. vue项目发现请求的接口不存在,把请求转交给proxy代理
  3. 代理把请求根路径替换为devServe.proxy属性的值,发起真正的数据请求
  4. 代理把请求到的数据,转发给axios

 

3)在项目中配置proxy代理

  1. 在main.js入口文件中,把axios的请求根路径改造为当前web项目的根路径
    // 2.配置请求根路径
    // axios.defaults.baseURL = 'https://www.escook.cn'
    axios.defaults.baseURL = 'http://localhost:8080'
  2. 在项目根目录下创建vue.config.js的配置文件,并声明如下的配置:
    module.exports = {
      devServer: {
        // 当前项目在开发调试阶段:会将任何位置请求(没有匹配到静态文件的请求)代理到 https://www.escook.cn
        proxy: 'https://www.escook.cn'
      }
    }

注意:

  • devServe.proxy提供的代理功能,仅在开发调试阶段生效
  • 项目上线发布时,依旧需要API接口服务器开启CORS跨域资源共享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/409697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Three.js - 透视相机(PerspectiveCamera)(三)

简介 在three.js中,摄像机的作用就是不断的拍摄我们创建好的场景,然后通过渲染器渲染到屏幕中。想通过不同的角度观看场景,就需要修改摄像机的位置来拍摄场景。本文详细介绍的是透视相机(PerspectiveCamera) 它是用来…

React Hooks(钩子函数)

React Hooks什么是Hooks?UseState()useReducer()useContext()useEffect()useRef()自定义钩子函数React Hooks中可以对性能进行优化的函数useMemo()useCallback()useMemo()和useCallback()的区别什么是Hooks? 首先:React的组件创建方式,一种是类组件&a…

划水日常(16.5)关于出版图书有偿征集书名 ~

关于摸鱼日常已经断更两个月了,前段时间一直忙在项目上,再加上搭了个网站,你要说有事儿吧,其实事儿也不多。你要说没事儿吧,我就是不更。原因其实很简单,我懒! 可直接跳过目录一,直至…

web自动化测试入门篇02——selenium安装教程

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

授予渔,从0开始搭建一个自己想要的网页

文章目录视频展示:张娜英网页一.开始阶段1.1考虑出基本的架构1.2填充思路1.3前提准备二.实现阶段2.1导航栏实现2.2点击切换视频2.3 左右特效2.4照片墙2.5视频轮播2.6底部2.7点击切换全局变量3.总结全部代码:☀️作者简介:大家好我是言不及行y…

【实战】React 必会第三方插件 —— Cron 表达式生成器(qnn-react-cron)

文章目录一、引子二、配置使用1.安装2.使用(1)直接调用(2)赋值到表单(Form)(3)自定义功能按钮(4)隐藏指定 Tab(5)其他三、常见问题及解…

【JavaScript 进阶教程】数组新增遍历方法的说明与使用

文章已收录专栏:JavaScript 进阶教程 作者:卡卡西最近怎么样 文章导读: 欢迎来到 JavaScript 进阶的学习,ES5 对 JS 的数组,字符串等内置对象的方法均有扩充。这篇文章我们要掌握的是新增的几个 Array 内置对象的常用迭…

【Web理论篇】Web应用程序安全与风险

目录🌲1.Web应用程序的发展历程🍂1.1 Web应用程序的常见功能🍂1.2 Web应用程序的优点🌲2.Web安全🍂2.1Web应用程序常见漏洞🍂2.2未对用户输入做过滤🍂2.3 造成这些漏洞的原因是什么呢&#xff1…

【实战分享】js生成word(docx),以及将word转成pdf解决方案分享

本文将记录如何用js生成word文件,并在node服务器端将word转换成pdf。记录的代码均是在真实业务场景中使用成功的代码,没有记录中间踩坑的过程。想直接抄答案的家人们可以跳转到1.2 程序编写部分,最终效果图可在1.2 程序编写部分中4. 效果展示…

【解决前端报错】Bad Request: Required request parameter ‘id‘ for method parameter type Long is not present

后端查询列表接口返回的对象里包含Long id,前端获取到这个id,执行通过Long id删除操作。这时删除操作报错400,大意是没找着Long类型的id. swagger相关接口截图: Long类型的在swagger显示是integer64 , integer是integer32. 这是前端请求后…

微信公众号 - 实现 H5 网页在微信内置浏览器中下载文件,可预览和下载 office 文件(doc / xls / ppt / pdf 等)适用于任何前端技术栈网站,兼容安卓和苹果系统!

前言 网上的教程都是让你写页面 “引导” 右上角三个点里,让用户自己去浏览器打开,其实这样用户体验并不好。 本文实现了 最新微信公众号 H5 网页(微信内置浏览器中),预览下载 office 文件,安卓和苹果全都支持! 您可以直接复制代码,移植到自己项目中去,任何前端项目(…

全网超详细的【Axure】Axure RP 9的下载、安装、中文字体、授权

文章目录1. 文章引言2. 下载Axure93. 安装Axure94. Axure9中文5. Axure9授权1. 文章引言 最近在学习原型图,针对画原型图的工具,反复对比墨刀、Axure、xiaopiu后,最终选择了Axure。 接下来,我便从Axure RP 9的下载、安装、中文字…

VUE实现微信扫码登录

获取access_token时序图&#xff1a; public中index.html引入 <script src"https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script> 微信登录操作 new WxLogin({// 以下操作把请求到的二维码嵌入到id为"weixin"的标签中i…

走进Vue【三】vue-router详解

目录&#x1f31f;前言&#x1f31f;路由&#x1f31f;什么是前端路由&#xff1f;&#x1f31f;前端路由优点缺点&#x1f31f;vue-router&#x1f31f;安装&#x1f31f;路由初体验1.路由组件router-linkrouter-view2.步骤1. 定义路由组件2. 定义路由3. 创建 router 实例4. 挂…

VUE3 子传父 父传子 双向传递

组件参数传递 父传子 father.vue <template > <!-- 父传子实现 2.向vue页面中的子组件传递该属性 :传给子组件的名字&#xff08;自定义&#xff09;“对应定义在父组件的属性名” --><Header :openpagevaria"openpagevaria" ></Header&g…

使用vue-cli-plugin-electron-builder创建electron+vue项目

文章目录一、nvm环境二、安装vue-cli、yarn三、使用vue项目管理器创建项目四、使用vue项目管理器安装插件五、进入my-electron-vue目录&#xff0c;启动electron六、安装VueDevtools&#xff0c;解决Vue Devtools failed to install: Error: net::ERR_CONNECTION_TIMED_OUT——…

npm install xxxx --legacy-peer-deps命令是什么?

本文分享自华为云社区《npm install xxxx --legacy-peer-deps命令是什么&#xff1f;为什么可以解决下载时候产生的依赖冲突呢&#xff1f;》&#xff0c;作者&#xff1a; gentle_zhou 。 在日常使用命令npm install / npm install XX下载依赖的操作中&#xff0c;我经常会遇…

npm 报错“A complete log of this run can be found in:”解决方法

npm 启动项目 npm run serve/dev的时候报了个错&#xff1a;再次记录一下 ! code ELIFECYCLE npm ERR! errno 1 npm ERR! new0.1.0 serve: vue-cli-service serve npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the new0.1.0 serve script. npm ERR! This is probably n…

【CSS 文字渐变、背景渐变实现方式】

CSS 文字渐变&#xff0c;背景渐变的几种实现方式 在我们日常页面开发当中&#xff0c;使用合适的css渐变效果能让我们的界面更加美观&#xff0c;赏心悦目。 一、CSS 文字渐变&#xff1a; 首先&#xff0c;文字渐变实际上是通过背景渐变裁剪成文字的前景色&#xff0c;然后…

【微信小程序】初入微信小程序

大家好我依旧是山鱼&#x1f41f;&#xff0c;对于初入小程序的同学来说本篇依旧是你的不二选择&#xff0c;它详细的介绍了小程序及小程序&开发者工具的使用&#xff0c;大家快快学起来吧&#xff01; 目录 一&#xff0c;小程序简介 1.1 什么是微信小程序 1.2小程序与…