前端saas化部署

news/2024/7/24 2:11:41 标签: 前端, javascript

在项目中难免会遇到一些特殊的需求,例如同一套代码需要同时部署上两个不同的域名A和B。A和B的不同之处仅在于,例如一些背景图片,logo,展示模块的不同,其他业务逻辑是和展示模块是完全一样的。此时我们当然可以考虑单独将代码复制一份出来,单独部署域名B,但是此时的维护成本就会增加。所以我们考虑到将部署同一套代码上去,然后进行一些区分。当然这种情况要看具体的业务需求。
决定使用同一套代码部署,那我们就需要处理以下问题
1,确定哪些是需要动态变化的内容,进行变量化
2,这些变量的内容从哪里获取
我们根据上面问题开始一一处理

域名A和域名B展示的内容区别有,接口访问域名,logo图片,背景图片。
新增一个配置文件config/baseHost.js

var origin = window.location.origin;
var host = window.location.host;
var pathname = window.location.pathname;
module.exports = {
	baseUrl: process.env.NODE_ENV === 'development' ? '/dev-api' : origin,
	study_baseUrl: process.env.NODE_ENV === 'development' ? '/study-api' : origin,
	url: host,
	pathname: pathname + '#/',
};

保存需要更新的内容缓存信息,此处选择的是通过localStorage和vuex一起存储。

store/app.js

const state = {
	logoBj: localStorage.getItem('logoBj') ? JSON.parse(localStorage.getItem('logoBj')) : {} //logo图片,登录图片等配置图片
};
/**更新tab菜单选中索引*/
SET_TENANTID: (state, current) => {
	console.log('SET_TENANTID-------------', current);
	state.tenantId = current?.tenantId;
	state.logoBj = current || {};
	localStorage.setItem('logoBj', JSON.stringify(current));
	localStorage.setItem('tenantId', current?.tenantId);
}

app.vue

// 获取用户配置信息
getTenantId() {
	this.$api.getTenantId().then(res => {
		if (res.rCode == 0) {
			this.SET_TENANTID(res.results || {});
		}
	});
}

我们通过当前访问域名提取接口域名并配置在配置文件中。
通过请求用户配置信息接口获取不同域名下的配置信息,并保存起来。
其他页面使用时进行调用。
此时基于此业务场景的saas化部署完成。


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

相关文章

Go语言中channel和互斥锁的应用场景

面对一个并发问题,我们的解决方案是使用channel还是互斥锁来实现并不总是很清晰。因为Go提倡使用通信来共享内存,所以一个常见的错误就是总是强制使用channel,不管实际情况如何。但是我们应该把这两种选择作为互补手段。 首先,简单回顾一下Go语言中的channel:channel是一种交…

SRIO学习(1)SRIO介绍以及IP核详解

文章目录 一、SRIO介绍1.1、概要1.2、RapidIO与传统嵌入互连方式的比较1.3、串行RapidIO协议(SRIO) 二、RapidIO协议结构及包格式2.1、逻辑层2.2 传输层2.3 物理层 三、IP核详解3.1、逻辑层3.1.1 I/O端口3.1.2 消息(Message)端口3…

vue3使用element-plus 树组件(el-tree)数据回显

html搭建结构 <el-tree ref"treeRef" :data"data" show-checkbox :default-expand-all"false" node-key"id" highlight-current:props"defaultProps" check"handleCheckChange" /> js // 编辑按钮 let J…

RobotFramework测试框架(7)-SeleniumLibrary常用关键字

浏览器操作 打开浏览器 Open Browser urlhttps://www.baidu.com browseredge关闭浏览器 Close Browser最大化浏览器 Maximize Browser Window设置浏览器宽高 Set Window Size 800 600刷新页面 Reload Page iframe操作 选中指定iframe Select Frame loc…

【Spring Security】1.Spring Security介绍 功能介绍

文章目录 一、Spring Security介绍二、功能介绍 一、Spring Security介绍 官方文档&#xff1a;https://docs.spring.io/spring-security/reference/index.html 官网解释&#xff1a;Spring Security 是一个提供 身份验证、授权 和 针对常见攻击的保护 的框架。 它为 保护命令…

第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组 题解

VP比赛链接 : 数据加载中... - 蓝桥云课 1 . 九进制 转 十进制 直接模拟就好了 #include <iostream> using namespace std; int main() {// 请在此输入您的代码int x 22*92*81*9;cout << x << endl ;return 0; } 2 . 顺子日期 枚举出每个情况即可 : …

网络:TCP、UDP协议

目录 netstat pidof xargs UDP协议 TCP协议 setsockopt函数 确认应答机制 超时重传机制 流量控制 滑动窗口 拥塞控制 延迟应答 捎带应答 面向字节流 粘包问题 在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号…

基于OT与CRDT协同算法的文档划词评论能力实现

基于OT与CRDT协同算法的文档划词评论能力实现 当我们实现在线文档平台时&#xff0c;划词评论的功能是非常必要的&#xff0c;特别是在重文档管理流程的在线文档产品中&#xff0c;文档反馈是非常重要的一环&#xff0c;这样可以帮助文档维护者提高文档质量。而即使是单纯的将…