angular 构建可以动态挂载的配置服务

angular 构建可以动态挂载的配置服务

Intro

angular 中可以指定 environment 来区分不同环境下的配置,然而 environment 中的配置会在打包时是固定的,想要像挂载 asp.net core 里的 appsettings.json 的配置文件一样挂载 environment 是做不到的,想要读取系统的环境变量也是行不通的。

有时候希望能够动态指定一些配置,运行 docker 容器的时候挂载一个配置文件来实现动态配置

实现方案

通过一个 config.js 的配置文件,将配置信息写入 window 对象的属性中,配置信息从 window 对象中读取,

这样就可以动态挂载配置文件了。

实现细节

实现 ConfigService

import { environment } from "../../environments/environment";
import { Injectable } from '@angular/core';
@Injectable({providedIn: 'root'
})
export class ConfigService {public GetApiBaseUrl(): string {if (window["__env"] && window["__env"]["ApiBaseUrl"]) {           return <string>window["__env"]["ApiBaseUrl"];}return environment.apiBaseUrl;}
}

config.js 示例:

var env = {ApiBaseUrl: "https://reservation.weihanli.xyz"
};
window["__env"]= env;

index.html 中引入 config.js 文件

<script src="assets/config.js"></script>

使用 ConfigService 示例:

import { ConfigService } from './ConfigService';
export class BaseService<TModel>{protected readonly apiBaseUrl;constructor(config: ConfigService){this.apiBaseUrl = config.GetApiBaseUrl();}
}

Docker 挂载

docker run -d -p 9000:80 --name=reservation-client -v $(pwd)/assets/config.js:/usr/share/nginx/html/assets/config.js weihanli/reservation-client:latest # 挂载配置文件

sample config.js:

var env = {ApiBaseUrl: "https://reservation.weihanli.top"
};
window["__env"]= env;

容器启动成功之后,访问 http://localhost:9000 即可,监控 HTTP 请求

可以看到实际请求的地址已经变成了挂载的配置文件里的地址了

Reference

  • https://github.com/WeihanLi/ActivityReservation/tree/dev/ActivityReservation.Clients/ReservationClient

  • https://reservation-client.weihanli.xyz/

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

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

相关文章

关于KN95口罩:可以使用多久?要不要呼吸阀?怎么佩戴?

再说一遍&#xff1a;为啥要戴口罩&#xff01;冠状病毒在人与人之间传播&#xff0c;通常是在某人接触到感染者的分泌物的时候。病毒的传染力直接影响了传播途径。目前流行的新型冠状病毒的传播途径尚不清楚&#xff0c;但是按照以往的经验&#xff0c;接触到感染者咳嗽或打喷…

android 拼音搜索汉字,android开发之使用拼音搜索汉字

国庆回了趟家&#xff0c;昨天真不想走&#xff0c;离家近的感觉太好。唉&#xff0c;不扯这些&#xff0c;说说今天的正事吧。上篇博客中介绍了自定义AutoCompleteTextView &#xff0c;但是用到了一个很蹩脚的技术&#xff0c;就是我们事先把每个汉字的拼音当作一个字段输入进…

从壹开始【学代码】|| 我开发中的用到的几个框架

本文梯子一、单层小Demo&#xff0c;开发小页面利器二、通用仓储三层模型&#xff0c;简单又封装性好三、通用权限框架开发全家桶&#xff0c;开箱即用服务子项目四、Blog.Core去Service层版本五、DDD-Lite 思想进行开发项目六、领域驱动设计&#xff0c;半落地项目七、企业级论…

C#的未来:简化参数空值验证

乍一看&#xff0c;提案#2145 似乎是 C# 8 可空引用类型特性的逻辑扩展。其基本思想是&#xff0c;开发人员不需要再显式地向接受非空参数的方法添加参数空值检查。然而&#xff0c;人们对于这个特性的争议很大。本文试图说明这些选项以及它们的利弊&#xff0c;以便读者能够得…

android一键截图代码,偷偷告诉你ADB命令葵花宝典【一键截图和录屏】

先导预告作为一名测试工程师&#xff0c;每天可能都会面临从不同的设备导出截图或视频的工作&#xff0c;有些可能是bug截图或bug回放视频&#xff0c;有些截图可能是提供给PM或UI验收等等。 常规操作是iOS设备可以借助于iTools等工具导出&#xff1b;而安卓设备可能需要从设备…

【C# 调用 Go 语言】0x1 Hello Golang

C# 和 Golang 都不是世界上最好的语言。在不同的业务场景下&#xff0c;C# 和 Golang 各有所长。如果要编写一个网络程序&#xff0c;显然 Golang 更擅长&#xff0c;而如果要编写一个桌面 GUI 程序&#xff0c;那么 C# 简直不要太爽。我们完全可以将两者用在同一个项目中&…

云原生时代, 选择.NET Core

在容器、Kubernetes、DevOps&#xff0c;以及微服务等技术的推动下&#xff0c;2020年云原生势不可挡。 .NET Core 也非常契合 云原生对应用运行时的不同需求&#xff0c;.NET Core和kubernetes 同年诞生发展&#xff0c; 2018年kubernetes 已经奠定了在容器编排领域的王者地位…

WebApi管理和性能测试工具WebApiBenchmarks

说到WebApi管理和测试工具其实已经非常多的了&#xff0c;Postman、Swagger等在管理和维护上都非常出色&#xff1b;在性能测试方面也有不少的工具如:wrk,bombardier,http_load和ab等等。不过这些工具都具有单一性&#xff0c;管理和维护好的在性能测试上比较低效&#xff0c;对…

android中的shape资源,Android Drawable资源讲解之shape篇

运用好Android的drawable资源&#xff0c;在开发中就可以减少图片的使用量&#xff0c;这样既缩小了app的体积&#xff0c;也省去了设计图片的时间&#xff0c;而且也容易适配不同的屏幕尺寸。今天首先来讲讲shape资源的使用。1. Shape的属性介绍shape共支持四种形状&#xff0…

C# WPF 一个设计界面

微信公众号&#xff1a;Dotnet9&#xff0c;网站&#xff1a;Dotnet9&#xff0c;问题或建议&#xff1a;请网站留言&#xff0c; 如果对您有所帮助&#xff1a;欢迎赞赏。C# WPF 一个设计界面今天正月初三&#xff0c;大家在家呆着挺好&#xff0c;不要忘了自我充电。武汉人民…

android中shape的属性,android中shape的属性

solid&#xff1a;实心&#xff0c;就是填充的意思android:color指定填充的颜色gradient&#xff1a;渐变android:startColor和android:endColor分别为起始和结束颜色&#xff0c;ndroid:angle是渐变角度&#xff0c;必须为45的整数倍。另外渐变默认的模式为android:type”line…

合集| 21 篇技术文章,带你从零入门 K8s

由阿里云与 CNCF 共同开发的《CNCF x Alibaba 云原生技术公开课》&#xff08;视频课程&#xff09;第一期已更新完毕。为了让大家有更好的学习体验&#xff0c;我们把视频课程转为图文&#xff0c;并请讲师重新编辑成文章&#xff0c;在公众号以“从零入门 K8s” 为系列进行每…

比尔盖茨早有预警:对大疫情爆发我们还没准备好

比尔盖茨早已预警&#xff0c;如今全球最大的危险不是核战争&#xff0c;而是高度传染的病毒&#xff0c;不是导弹&#xff0c;而是微生物。新型冠状病毒感染肺炎新增病例数仍在增长&#xff0c;钛媒体根据百度数据统计官方发布显示&#xff0c;截止发稿前1月30日9:30&#xff…

AcWing 3208. Z字形扫描

在图像编码的算法中&#xff0c;需要将一个给定的方形矩阵进行 Z 字形扫描(Zigzag Scan)。 给定一个 nn 的矩阵&#xff0c;Z 字形扫描的过程如下图所示&#xff1a; 对于下面的 44 的矩阵&#xff0c; 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 对其进行 Z 字形扫描后得到长度为 16 的…

写公众号的这一年多

2018年五月&#xff0c;在微信发布公众号助手之时我开通了个人公众号「不止dotNET」&#xff0c;到现在已经一年半多的时间了&#xff0c;非常时期&#xff0c;在家自我隔离&#xff0c;没事写写总结。数据总共发布了 53 篇原创文章&#xff0c;离之前的目标&#xff08;每周一…

AcWing 703. 数独检查

**数独是一种流行的单人游戏。 目标是用数字填充9x9矩阵&#xff0c;使每列&#xff0c;每行和所有9个非重叠的3x3子矩阵包含从1到9的所有数字。 每个9x9矩阵在游戏开始时都会有部分数字已经给出&#xff0c;通常有一个独特的解决方案。 给定完成的N2∗N2数独矩阵&#xff0c…

pdf文件内容查看器 -- 采用wpf开发

前言 pdf是一种应用非常广的版式文档格式&#xff0c;已成为事实上的国际标准。关于pdf格式的文章汗牛充栋&#xff0c;本文也是关于pdf格式的文章&#xff0c;但是本文不是纸上谈兵&#xff1b;本人这几周一直研究pdf格式内容&#xff0c;不但对pfd格式的内容有所了解&#xf…

​WeihanLi.Npoi 根据模板导出Excel

WeihanLi.Npoi 根据模板导出ExcelIntro原来的导出方式比较适用于比较简单的导出&#xff0c;每一条数据在一行&#xff0c;数据列虽然自定义程度比较高&#xff0c;如果要一条数据对应多行就做不到了&#xff0c;于是就想支持根据模板导出&#xff0c;在 1.8.0 版本中引入了根据…

UC浏览器如何开启html5,如何开启手机uc浏览器中的极速模式

如何开启手机uc浏览器中的极速模式当我们在使用手机的时候&#xff0c;可以下载uc浏览器来浏览网页&#xff0c;为了提升网页的浏览速度&#xff0c;可以开启浏览器中的极速模式&#xff0c;接下来就由小编来告诉大家如何操作。具体如下&#xff1a;1.第一步&#xff0c;打开手…

前端扫盲:什么是API网关?为什么它有用?

API 通常被称为应用程序从后端服务访问数据和业务逻辑的前门。API 本质上是一个软件向其他人或程序提供的接口&#xff0c;允许他们与该软件进行交互。 在创建 API 时&#xff0c;需要选择编程语言(Java、Python、PHP 等)来编写 API 逻辑&#xff0c;还需要将 API 部署到服务器…