Vue2跨域配置打包上线流程

Vue2跨域配置打包上线流程

一、Vue项目配置跨域问题

(1)跨域的概念

后端开发的时候,采用微服务来进行开发。

每个开发者都有自己的项目,最后整合在一起进行通信。微服务开发

前端还需要考虑配置跨域问题

跨域:因为浏览器的同源策略(安全策略),导致我们无法在浏览器中访问(协议、端口、ip)不同的服务器

 

xml

代码解读

复制代码

<html>    <link href="./index.css">    <img src="./index.js"> <script>    const baseURL = http://127.0.0.1:3000    const res = await axios.get(baseURL+"/users/find") </script> </html>

获取css代码:http://127.0.0.1:8080/index.css

获取js代码:http://127.0.0.1:8080/index.js

获取用户数据:http://127.0.0.1:3000/users/find

(2)后端配置跨域的思路

后端配置跨域来解决我们前端报错的问题,也是一种主流方案。

 

php

代码解读

复制代码

var allowCrossDomain = function (req, res, next) {  // 设置允许跨域访问的请求源(* 表示接受任意域名的请求)     res.header("Access-Control-Allow-Origin", "*");  // 设置允许跨域访问的请求头  res.header("Access-Control-Allow-Headers", "X-Requested-With,Origin,Content-Type,Accept,Authorization");  // 设置允许跨域访问的请求类型  res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");  // 同意 cookie 发送到服务器(如果要发送cookie,Access-Control-Allow-Origin 不能设置为星号)  res.header('Access-Control-Allow-Credentials', 'true');  next(); }; app.use(allowCrossDomain)

后端跨域,前端浏览器就可以直接访问

原理:

  1. 前端浏览器发现跨服务器获取数据的时候。
  2. 浏览器先默认发送一个请求到后端,请求类型options
  3. 当浏览器通过options请求获取到响应一些服务器资源后,
  4. 继续发送你们自己的请求到后端。
  5. 后端就可以返回数据到前端

总结:

  1. 后端 配置跨域,浏览器默认发送两次请求。其中一次options
  2. options请求目的获取后端允许跨域配置。options请求成功后,服务器响应头会将你的配置传递浏览器
  3. 浏览器接受这些信息,继续发送请求给后端,不存在跨域问题

跨域问题只存在于浏览器。H5、WEB

小程序、app不存在跨域问题

前端和后端通信

image-20230705102355278

(3)前端配置跨域

服务器和服务器之间不存在跨域。

需要配置代理服务器。前端服务器中在配置一个代理服务器,将指定的请求通过代理服务器转发给后端服务器获取数据

(1)在vue项目跟目录创建vue.config.js文件

这个文件是vue内置的一个webpack配置文件,你写的配置可以覆盖默认webpack

 

ruby

代码解读

复制代码

module.exports = {    devServer:{        port:8888,        //配置代理服务器,webpack内置的        proxy:{            //当检测到路径包含了/api 进入代理服务器            //http://127.0.0.1:4001/api/usersAD/getSearch             "/api":{                target:"http://127.0.0.1:4001",                changeOrigin:true,                //表达的意思就是将路径中/api,替换成空字符串                pathRewrite:{                    '^/api':''               }             },       }   } }

(2)代码中修改baseURL

 

xml

代码解读

复制代码

<template>  <div>    <h2>注册页面</h2>    <button @click="fetchData">发送请求</button>  </div>   </template> ​ <script> import axios from "axios" export default {  created(){    console.log("注册组件"); },  methods:{    async fetchData(){      axios.defaults.baseURL = "/api"      const res = await axios({        url:"/usersAD/getSearch",        method:"POST",        data:{}     })      console.log(res);   } } } </script>

当前端访问地址里面包含了/api的时候,代表先默认访问前端服务器。

前端服务器检测路径有/api进入代理服务器。

代理服务器转发请求指定服务器

前端请求只会发送一次。不存在options验证的过程

代理服务器是webpack提供的。

一旦打包后,你的代码静态资源,没有任何webpack

只限于开发环境,打包后正式的前端服务器运行,上面配置都无效

image-20230705110644326

二、配置环境变量

Vue-CLI提供的配置

访问地址为:cli.vuejs.org/zh/guide/mo…

概念:脚手架工具提供了在不同的环境下,配置不同的参数,不同命令来进行项目加载的时候,读取不同文件

你们很多配置可以不用硬编码在代码中

在项目跟目录下面可以配置.env.[mode]

(1)环境配置文件

项目中情况:

  1. .env:代表了当前项目环境配置
  2. .env.development:开发环境配置
  3. .env.production:配置生产环境
  4. .env.test:配置测试环境

.env.development代码如下

 

ini

代码解读

复制代码

VUE_APP_PROT = 8889 VUE_APP_BASE_URL = "/api" VUE_APP_TITLE = "woniu" VUE_APP_SERVER_PATH = "http://127.0.0.1:4001"

环境变量的key必须是VUE_APP开头的。

.env.production 代码如下

 

ini

代码解读

复制代码

VUE_APP_PROT = 9999 VUE_APP_BASE_URL = "/myapis" VUE_APP_TITLE = "woniu"

(2)在封装请求的时候,将baseURL替换为环境变量

 

javascript

代码解读

复制代码

methods:{    async fetchData(){      //任何一个地方,获取系统环境变量      //Nodejs提供一个全局变量 process      // console.log(process.env);      axios.defaults.baseURL = process.env.VUE_APP_BASE_URL      const res = await axios({        url:"/usersAD/getSearch",        method:"POST",        data:{}     })      console.log(res);   } }

在Node环境下面提供的全局变量process,可以直接使用

(3)在vue.config.js文件配置代理内容

 

arduino

代码解读

复制代码

const repacePath = "^"+process.env.VUE_APP_BASE_URL module.exports = {    devServer:{        port:Number(process.env.VUE_APP_PROT),        //配置代理服务器,webpack内置的        proxy:{            //当检测到路径包含了/api 进入代理服务器            //http://127.0.0.1:4001/api/usersAD/getSearch           [process.env.VUE_APP_BASE_URL]:{                target: process.env.VUE_APP_SERVER_PATH,                changeOrigin:true,                //表达的意思就是将路径中/api,替换成空字符串                pathRewrite:{                   [repacePath]:''               }             },       }   } }

根据不同的环境,读取不同配置,进行加载

如果是生产环境npm run build 读取的production配置

三、打包部署

(1)nginx服务器

是一个非常优秀的静态资源服务器。

前端提供的静态资源,nginx在处理静态资源非常高效,

处理并发的能力非常好

nginx并发能达到5万,只是一台服务器。

tomcat服务器,500并发到性能瓶颈。

下载nginx服务器,在你的电脑中启动。就可以访问

conf:里面存放nginx的配置

html:存放的打包静态资源

nginx.exe服务器启动运行文件

(2)前端项目配置好生产环境打包

 

arduino

代码解读

复制代码

npm run build

项目目录下面dist目录。

(3)将dist文件夹里面的资源拷贝

将dist里面资源拷贝到nginx服务器html文件夹下面

(4)启动服务器

 

代码解读

复制代码

nginx.exe

你可以在系统进程里面可以看到nginx

(5)浏览器默认访问80端口

 

makefile

代码解读

复制代码

127.0.0.1:80

(2)配置nginx的反向代理

前端如果要访问接口,

第一种方式:直接访问后端服务器地址,后端要配置跨域

第二种方式:前端先访问nginx,检测路径有指定符号,通过nginx代理,转发给后端服务器。

在nginx的conf文件夹下面找到nginx.conf

 

ini

代码解读

复制代码

server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; try_files $uri /index.html; } location /apis/ { rewrite ^.+apis/?(.*)$ /$1 break; proxy_pass http://127.0.0.1:4001; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } ... 省略后面代码 }

启动项目就可以进行访问了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值