如何用nest中对环境变量等文件进行配置

简介: 如何用nest中对环境变量等文件进行配置

少配置文件

首先安装一个依赖 @nest/config用于自动读取配置文件


image.png


接着在根目录下创建.env文件  我们简单配置一下用例APP_NAME


image.png


接着在app.module.ts中引入ConfigModule,它的内部向外暴露的forRoot工厂函数用于我们来读取配置项, isGlobal熟悉模块应该知道,给它全局使用

image.png

接着在app.controller.ts中我们来使用一下


image.png

这样我们就读到了环境变量


还有一种方式,在node中我们还可以利用process.env来获取环境变量

image.png

image.pngx`

一个注意点!!!

如果我们把项目开源,提交到仓库时,一定要注意,如果有阿里云密钥或者类似APP_SCRECT这样的密钥,提交时一定要在.gitignore文件中加上.env文件,防止泄露


多文件配置

一般写法

当我们的环境变量有很多种类有不同,类似数据库,文件格式等等,这个时候我们可以用模块化的思想把它们提取到不同文件中,最后再统一导出


image.png


image.png


我们创建了一个app.config.ts里面定义了不同种类的环境变量,在ConfigModule的load配置项中引入,它可以将我们创建的config.ts模块与.env文件结合


image.png

image.png


我们发现这样也是可以的,但是有个弊端就是每个环境变量都放在一个文件里里面,不好管理。


我们可以提取不同到的文件中


image.png


在src下面创建一个config文件夹专门存放配置文件,最后由index.ts导出


image.png


接下来在app.module中重新导入,注意需要用到展开语法


image.png


到这一步其实已经实现了所有功能,但是没有类型提示,我们又引申出了命名空间的方式


命名空间

image.png

image.png


创建了一个database.config,将其在index.ts中导出


注意命名空间这种写法在ConfigModule中处理方式不一样,他的处理就像这样


image.png


所以我们在controller中用的时候要用依赖注入的方式,注意这里的@Inject()里面的写法是匹配到key 也就'database'


image.png


image.png

到这里也是基本完成了,但是我们注意到我这里database类型是any


接下来就是类型提示的问题了


两种类型提示方式

第一种用ts手写实现

type getType<T extends () => any> = T extends () => infer U ? U : T;
type k = typeof databaseConfig;
type databaseType = getType<k>;


image.png

第二种用config包自带的功能


image.png

两种方式都可以实现类型提示


写在最后

关于两种配置方式,一般来说在.env文件里面配置这些已经足够了,不过这种模块化的思想还是值得学习的,里面有一些细节需要注意,希望能帮到大家!

相关文章
|
消息中间件 安全 网络协议
Akka事件驱动新选择
在高并发场景解决方案中,多从线程角度出发,以解决线程安全问题,锁范围又需要多业务场景考虑,何时上锁,何时解锁,何时自动过期等,而事件驱动是从执行什么操作驱动的,在软件系统的设计层面,两者关联性不大,一个强调安全,一个强调策略,那么有没有两者结合解决并发编程难的事件驱动解决方案呢?带着场景解决方案我们走进Akka。
677 0
Akka事件驱动新选择
|
机器学习/深度学习 自然语言处理 索引
深度学习:Self-Attention与Multi-heads Attention详解
深度学习:Self-Attention与Multi-heads Attention详解
1012 0
深度学习:Self-Attention与Multi-heads Attention详解
|
前端开发 Go 网络安全
Go语言:xterm.js-websocket Web终端堡垒机
1.前言 因为公司业务需要在自己的私有云服务器上添加添加WebSsh终端,同时提供输入命令审计功能. 从google上可以了解到xterm.js是一个非常出色的web终端库,包括VSCode很多成熟的产品都使用这个前端库.
7631 0
|
10月前
|
机器学习/深度学习 人工智能 运维
你的手表,不只是看时间的——可穿戴设备的早期疾病预警术
你的手表,不只是看时间的——可穿戴设备的早期疾病预警术
296 0
|
JavaScript 索引
vscode中快捷生成自定义vue3模板
vscode中快捷生成自定义vue3模板
3158 1
|
人工智能 IDE 程序员
从 AI Coding 演进路径看通义灵码 AI 程序员的发布,让更多 idea 变成产品
从 AI Coding 演进路径看通义灵码 AI 程序员的发布,让更多 idea 变成产品
ACE
|
SQL 分布式计算 数据处理
如何创建2024云栖Openlake测试项目和配置环境
2024年云栖大会,MaxCompute 多项重磅产品新功能邀测发布,新特性包括 支持OpenLake的湖仓一体2.0、Object Table支持SQL或MaxFrame处理非结构化数据、Delta Table增量表格式、基于增量物化视图的增量计算、MCQA2.0 SQL引擎查询加速等。其相关特性将在中国区 公共云 北京、上海、杭州、深圳Region 上线开放试用。本文以最佳实践的方式,帮助您创建MaxCompute和周边产品 在Openlake解决方案demo中需要准备的实例、项目和开发环境,并完成配置。欢迎您玩转云栖邀测demo,体验新功能。
ACE
1482 8
|
Linux 虚拟化 云计算
virtio 1.2 来了!龙蜥社区携手业界打造新版虚拟化 IO 标准
Per-virtqueue reset特性是解决virtio-net不支持队列级别的reset操作的问题。
virtio 1.2 来了!龙蜥社区携手业界打造新版虚拟化 IO 标准