如何用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文件里面配置这些已经足够了,不过这种模块化的思想还是值得学习的,里面有一些细节需要注意,希望能帮到大家!

相关文章
|
5天前
|
Go
这个报错是因为在构建chaosblade时,找不到crypto/ecdh模块
【1月更文挑战第22天】【1月更文挑战第110篇】这个报错是因为在构建chaosblade时,找不到crypto/ecdh模块
66 6
|
8月前
|
关系型数据库 Go
106【GoLand-基础2】(四)
106【GoLand-基础2】
55 0
|
5天前
|
前端开发
【专栏】`webpack` 的 `DefinePlugin` 插件用于在编译时动态定义全局变量,实现环境变量差异化、配置参数动态化和条件编译
【4月更文挑战第29天】`webpack` 的 `DefinePlugin` 插件用于在编译时动态定义全局变量,实现环境变量差异化、配置参数动态化和条件编译。通过配置键值对,如 `ENV: JSON.stringify(process.env.NODE_ENV)`,可以在代码中根据环境执行相应逻辑。实际应用包括动态加载资源、动态配置接口地址和条件编译优化代码。注意变量定义的合法性和避免覆盖,解决变量未定义或值错误的问题,以提升开发效率和项目质量。
|
5天前
|
安全 定位技术
ENVI软件App Store插件工具的下载、安装与使用方法
ENVI软件App Store插件工具的下载、安装与使用方法
146 1
|
5天前
|
存储
【源码共读】dotenv:从 .env 文件中读取环境变量
【源码共读】dotenv:从 .env 文件中读取环境变量
98 1
|
8月前
|
Go
106【GoLand-基础2】(三)
106【GoLand-基础2】
21 0
|
8月前
|
Go 索引 容器
106【GoLand-基础2】(二)
106【GoLand-基础2】
24 0
|
8月前
|
测试技术 编译器 Go
106【GoLand-基础2】(一)
106【GoLand-基础2】
40 0
|
JavaScript 前端开发
使用commander和inquirer创建命令行交互项目
使用commander和inquirer创建命令行交互项目
279 0
使用commander和inquirer创建命令行交互项目
[开发小技巧] Cocos2dx应用程序的命令行参数workdir:重定向工作目录
[开发小技巧] Cocos2dx应用程序的命令行参数workdir:重定向工作目录
71 0