记录一下方便的条件编译

1. 需要准备:

        1-1、npm i  cross-env -D 是跨平台的自定义编译
        1-2、构造工具:vite/webpack
                ==>  vite: import.meta.env.VITE_NODE_ENV 
                ==> webpack:process.env.NODE_ENV这里使用vite为例子
        1-3、 package.json 

2. 思路与步骤

  1. 首先我们知道 axios这些反向代理在测试环境/生产环境下 都是没有用的;
  2. 所以我们对于这种上线后的我们需要直接访问 就是完整的url的api 例如https:xxx.com/api/xxx,但是这样就会存在cors 跨域问题 对于这个问题有两种解决方法1:nginx的web服务器;2:服务端cors对我们这个域名或ip地址信任或者携带某个字段;这里我们选择第2种 第一种俺也还没有使用过;
  3. 然后就是前端了 ,先把第一步的cross-env下载好,然后到package.json文件中修改
      "scripts": {"dev": " cross-env VITE_NODE_ENV=dev vite --mode development --host 0.0.0.0","build": "run-p type-check \"build-only {@}\" --","preview": "vite preview","build-only": "vite build","type-check": "vue-tsc --build --force","dev:prod": "cross-env VITE_NODE_ENV=prod vite","build:prod": "cross-env NODE_ENV=prod vite build"},
    /** 
    * --host 0.0.0.0 是为了让局域网也可访问
    * --mode development 这个可以不用加 这个是没有cross-env时候内置的
    * cross-env VITE_NODE_ENV=dev 这个就是设置VITE_NODE_ENV的值
    * "dev:prod": "cross-env VITE_NODE_ENV=prod vite"可以不用 这里是用来测试的
    */
    
  4. 然后需要注意的是 我们的目的就是当为prod时 把一个完整的url拼接出来,为了保证一致性,可以创建一个config.ts来控制
    export const BASE_URL = import.meta.env.VITE_NODE_ENV === 'dev'?'/api':'http://xxx.xxyy.com/'

  5. 然后就是如何应用在请求接口中 这个就比较简单了 我们可以从上面看出来当为dev时就是我们需要使用proxy代理的基地址 不过我不确定axios的baseURL在上线后还有用没有 所以我采取设置axios的baseURL为'/' 对每个请求api添加baseURL,再集成到api中
  6. 目录结构
  7. 接下来先看http.ts
    import utils from '@/utils';
    import axios from 'axios';
    import { useRouter } from 'vue-router';
    const router = useRouter(); // 获取 router 实例
    const http = axios.create({// baseURL: '/api'baseURL:'/'
    })// 添加请求拦截器
    http.interceptors.request.use(function (config) {// 在发送请求之前做些什么config.headers.Authorization = config.headers.Authorization ? config.headers.Authorization : 'Bearer ' + localStorage.getItem('token')// console.log('请求头',config.headers)return config;
    }, function (error) {// 对请求错误做些什么return Promise.reject(error);
    });
    // 添加响应拦截器
    http.interceptors.response.use(function (response) {// 2xx 范围内的状态码都会触发该函数。// console.log(response.headers, 'response')response.headers.authorization && localStorage.setItem('token', response.headers.authorization)// 对响应数据做点什么return response.data;
    }, function (error) {// 超出 2xx 范围的状态码都会触发该函数。// 对响应错误做点什么console.log(error.response.data.message, 'liwei')switch (error.response.status) {case 400:// utils.message.error(error.response.data.message.message)// utils.message.error(error.response.data.message.response.message[0])// 判断类型是否不是数组if(!Array.isArray(error.response.data.message.response.message)){utils.message.error(error.response.data.message.response.message)}else{utils.message.error(error.response.data.message.response.message[0])}break;case 401:utils.message.error(error.response.data.message.message)// 重新跳转location.href = '#/login'break;}return Promise.reject(error);
    });export default http
  8. 然后是api版块
    import { useUserStore } from '@/stores/userStore'
    import http from "../http"
    import { BASE_URL } from '@/config'
    import type { User, Cover, AuditLog, RegisterUser, FormLibrary, FriendLink,AddCover, ChatMessage, Comment,FriendLinkCategory,Library, ChatList, NotificationType, SendPost, PromiseResult, Statistics, PromiseResult1, Post, UserInfo, Tag } from '@/request/type'
    import { LogType, UserTagType, CoverType,ContentType,StateType } from '@/request/type'
    //  /awei 为不需要token的
    // 登录
    export const loginUser = async (data: User): Promise<UserInfo> => {return http.post(`${BASE_URL}user/awei/login`, data)
    }
    // 注册
    export const registerUser = async (data: RegisterUser) => {return http.post(`${BASE_URL}user/awei/create`, data)
    }// 判断邮箱是否注册
    export const isEmailRegister = async (email: string) => {return http.get(`${BASE_URL}user/awei/email/${email}`)
    }
    // 发送邮件验证码
    export const sendEmailCode = async (data: { email: string }) => {return http.post(`${BASE_URL}mail/awei`, data)
    }
    /*** 修改友链分类的名称和描述* @type {Object}* @property {number} id - 友链分类的唯一标识符* @property {string} name - 友链分类的名称,例如 "学习资源"* @property {string} description - 友链分类的描述,例如 "好东西"
    */
    export const updateFriendLinkCategory = async (data:{id:number,name:string,description:string}):Promise<PromiseResult<FriendLinkCategory>>=>{return http.post(`${BASE_URL}linkcategories/update`,data)
    }
    /*** 删除友链分类* @type {Object}* @property {number[]} ids - 友链分类的唯一标识符*/
    export const deleteFriendLinkCategory = async (data:{ids:number[]}):Promise<PromiseResult<any>>=>{return http.post(`${BASE_URL}linkcategories/delete`,data)
    }
    /*** @description 获取评论列表* @type {Object}* @property {number} page - 页码* @property {number} pageSize - 每页显示的评论数量
    */
    export const getCommentList = async (data:{page:number,pageSize:number}):Promise<PromiseResult1<Comment[]>>=>{return http.post(`${BASE_URL}comment/getCommentByUserId`,data)
    }
    /*** @description 删除评论* @type {number}* @property {number} id - 评论的唯一标识符* @returns **删除后的评论信息***/
    export const deleteComment = async (id:number):Promise<PromiseResult<Comment>>=>{return http.post(`${BASE_URL}comment/remove/${id}`)
    }
  9. 然后就是集成到index.ts中
    // 集体导出
    import * as user from './user'
    import * as img from './img'
    import * as tc from './tc'
    const api = {user,img,tc
    }
    export default api
  10. ·最后就是根据编译的命令来对应不同的配置了

提一句 由于上线后是直接通过完整的url访问 所以我们需要让服务端cross通过我们的请求 后续会补充上去 

更改!!!

前面提到的不确定axios的baseURL有没有用 现在确定是可以的 这样如果是同一个域名就可以直接设置baseURL 如果不同可以采取前面的 也可以再封装一个axios 如果前后端使用的是同一个域名 都可以不使用 直接使用局部处理就好了

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业数据泄露安全演练(分享)

该文章主要分享作者在XXX企业内部做的一次【数据泄露安全演练】&#xff0c;涉及演练背景、目的、演练流程、剧本设定、预期行为、结果等等。 以下是完整的演练方案&#xff0c;有不足的地方希望大家指出&#xff01;&#xff01; 需要原版方案电子版的可以联系作者获取。 演练…

[前端面试]计算机网络

TCP/IP 与OSI TCP/IP TCP/IP 四层模型是一个分层网络通信模型&#xff0c; 它将网络通信过程分为四个层次&#xff0c;这四层分别是&#xff1a;网络接口层、互联网层、传输层和应用层。 网络接口层负责在计算机和网络硬件之间传输数据&#xff0c;负责在物理网络上发送和接…

Conmi的正确答案——在Kibana中进入Elasticsearch的索引管理页面

Elasticsearch版本&#xff1a;7.17.25 Kibana版本&#xff1a;7.17.25 注&#xff1a;索引即类似mysql的表。 0、进入首页 1、未创建任何“索引模式”时&#xff1a; 1.1、点击左边的三横菜单&#xff1b; 1.2、点击“Discover”&#xff0c;进入“发现”页面&#xff1b; 2…

Marin说PCB之电源的Surface Current Density知多少?

小编我是一位资深的国漫迷&#xff0c;像什么仙逆&#xff0c;斗破&#xff0c;斗罗&#xff0c;完美世界&#xff0c;遮天&#xff0c;凡人修仙传&#xff0c;少年歌行等&#xff0c;为了可以看这些视频小编我不惜花费了攒了很多年的私房钱去开了这个三个平台的会员啊&#xf…

安卓开发之数据库的创建与删除

目录 前言&#xff1a;基础夯实&#xff1a;数据库的创建数据库的删除注意事项 效果展示&#xff1a;遇到问题&#xff1a;如何在虚拟机里面找到这个文件首先&#xff0c;找到虚拟机文件的位置其次&#xff0c;找到数据库文件的位置 核心代码&#xff1a; 前言&#xff1a; 安…

UV紫外相机

在产业设备领域&#xff0c;运用相机进行检测的需求很大&#xff0c;应用也很多样&#xff0c;对于图像传感器性能的期望逐年提升。在这样的背景下&#xff0c;可拍摄紫外线&#xff08;UV&#xff1a;Ultra Violet&#xff09;图像的相机拥有越来越广泛的应用场景。将UV照明和…

Python学习的自我理解和想法(22)

学的是b站的课程&#xff08;千锋教育&#xff09;&#xff0c;跟老师写程序&#xff0c;不是自创的代码&#xff01; 今天是学Python的第22天&#xff0c;学的内容是正则表达式&#xff0c;明天会出一篇详细实例介绍。电脑刚修好&#xff01;开学了&#xff0c;时间不多&…

ARM base instruction -- bfi

Bitfield Insert copies a bitfield of <width> bits from the least significant bits of the source register to bit position <lsb> of the destination register, leaving the other destination bits unchanged. 位域插入将<width>位的位域从源寄存器的…

Python实现深度学习模型预测控制(tensorflow)DL-MPC(Deep Learning Model Predictive Control

链接&#xff1a;深度学习模型预测控制 &#xff08;如果认为有用&#xff0c;动动小手为我点亮github小星星哦&#xff09;&#xff0c;持续更新中…… 链接&#xff1a;WangXiaoMingo/TensorDL-MPC&#xff1a;DL-MPC&#xff08;深度学习模型预测控制&#xff09;是基于 P…

ubuntu交叉编译expat库给arm平台使用

1.下载expat库源码: https://github.com/libexpat/libexpat/release?page=2 wget https://github.com/libexpat/libexpat/release/download/R_2_3_0/expat-2.3.0.tar.bz2 下载成功: 2.解压expat库,并进入解压后的目录: tar xjf expat-2.3.0.tar.bz2 cd expat-2.3.0 <…

C# 编程语言学习教程

C# 编程语言学习教程 目录 C# 简介 1.1 什么是 C#1.2 C# 的特点1.3 C# 的应用领域 环境搭建 2.1 安装 Visual Studio2.2 创建第一个 C# 项目 基础语法 3.1 数据类型3.2 控制结构3.3 数组与字符串 面向对象编程 4.1 类与对象4.2 继承与多态4.3 接口与抽象类 常用库与框架 5.1 .…

文件上传知识梳理:原理、工具、绕过、利用与防御

文章简介&#xff1a; 本文全面梳理了文件上传相关知识&#xff0c;包括文件上传漏洞的原理及危害&#xff0c;介绍了 Webshell 相关工具&#xff08;如冰蝎、哥斯拉、蚁剑&#xff09;&#xff0c;详细阐述了文件上传绕过检测的多种方法&#xff08;前端检测、服务端检测的各…

学Linux的第六天

目录 账户和组管理 工作组管理 创建工作组groupadd 修改工作组groupmod 添加/删除组成员gpasswd 删除工作组groupdel 查看用户登录系统的情况 users查看当前登录系统的用户 last命令 lastlog命令 w命令 显示登录到系统的用户信息 who命令 Linux文件系统权限 文件…

KKFileView v4.4.0文件预览服务 编译和window运行和nginx代理设置

目录 一、拉取代码 二、编译打包 三、测试使用 四、实际使用 五、其他问题 本文记录&#xff0c;使用最新v4.4.0版本KKFileView源代码&#xff0c;在本地window上搭建文件预览服务&#xff0c;并通过nginx反向代理实现https访问。 一、拉取代码 从官网github上下载源代码…

树莓派基础设置--1.更新和升级操作系统

注意&#xff1a;使树莓派保持最新状态可以提高系统的安全性&#xff0c;但对于开发人员并不建议随意更新&#xff01; 一、图像化界面 一般桌面的右上角也会显示树莓派系统更新的提示&#xff0c;可以点击相应选项进行更新&#xff01; 二、使用APT 用来管理软件安装、升级…

用Pyhon写一款简单的益智类小游戏——2048

文字版——代码及讲解 代码—— import random# 初始化游戏棋盘 def init_board():return [[0] * 4 for _ in range(4)]# 在棋盘上随机生成一个2或4 def add_new_tile(board):empty_cells [(i, j) for i in range(4) for j in range(4) if board[i][j] 0]if empty_cells:i,…

STL---unordered_set与unordered_map与前言(哈希表)

文章目录 哈希哈希容器&#xff1a;unordered_set与unordered_map哈希哈希表哈希函数哈希冲突解决哈希冲突扩容 哈希表的代码实现线性探测法解决哈希冲突哈希桶解决哈希冲突 哈希 哈希容器&#xff1a;unordered_set与unordered_map unordered_set 定义如下: 常用接口 跟桶…

深度学习(八) TensorFlow、PyTorch、Keras框架大比拼(8/10)

一、深度学习框架概述 深度学习框架在当今人工智能和机器学习领域中占据着至关重要的地位。其中&#xff0c;TensorFlow 由 Google 开发&#xff0c;自 2015 年发布以来&#xff0c;凭借其灵活的计算图、自动微分功能以及跨平台支持等特点&#xff0c;迅速成为主流深度学习框架…

盘点Windows10系统之下好用的录屏工具!

在当前时代&#xff0c;互联网媒体的普及。图片视频等随处可见&#xff0c;越来越多的工作、学习、培训等都以转变成视频形式。我的工作就是离不开利用视频来进行交流。也因如此&#xff0c;很多时候因为直播中需要进行回顾等录屏需求&#xff0c;使用过多款录屏软件。拥有一款…

【MySQL】实战篇—项目需求分析:ER图的绘制与关系模型设计

在软件开发中&#xff0c;数据库是信息系统的核心部分&#xff0c;合理的数据库设计能够显著提高系统的性能和可维护性。 ER图&#xff08;实体-关系图&#xff09;是数据库设计的重要工具&#xff0c;它通过图形化的方式描述了数据实体及其相互关系&#xff0c;帮助开发者和设…