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

相关文章
|
4月前
|
JSON JavaScript API
如何使用Newman 命令行的方式去运行API脚本?
如何使用Newman 命令行的方式去运行API脚本?
如何使用Newman 命令行的方式去运行API脚本?
|
4月前
|
JavaScript 前端开发 测试技术
移动端(APP)自动化脚本工具详细列举(autojs、easyclick、hamibot、ctrljs ...)
移动端(APP)自动化脚本工具详细列举(autojs、easyclick、hamibot、ctrljs ...)
1690 0
|
2月前
|
存储 域名解析 运维
函数计算产品使用问题之Lumen环境中,getenv() 函数无法获取环境变量,是什么导致的
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
JSON 数据格式 Python
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
|
3月前
|
监控 Serverless API
函数计算操作报错合集之在函数计算用gunicorn启动flask,会报错找不到这个包,该怎么办
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
3月前
|
Java Linux 网络安全
Linux常用50个命令分享:功能、示例与实用技巧
Linux常用50个命令分享:功能、示例与实用技巧
|
4月前
|
前端开发
【专栏】`webpack` 的 `DefinePlugin` 插件用于在编译时动态定义全局变量,实现环境变量差异化、配置参数动态化和条件编译
【4月更文挑战第29天】`webpack` 的 `DefinePlugin` 插件用于在编译时动态定义全局变量,实现环境变量差异化、配置参数动态化和条件编译。通过配置键值对,如 `ENV: JSON.stringify(process.env.NODE_ENV)`,可以在代码中根据环境执行相应逻辑。实际应用包括动态加载资源、动态配置接口地址和条件编译优化代码。注意变量定义的合法性和避免覆盖,解决变量未定义或值错误的问题,以提升开发效率和项目质量。
227 3
|
4月前
|
存储 缓存 算法
【Conan 入门教程 】了解 Conan2.1 中默认生成器的作用
【Conan 入门教程 】了解 Conan2.1 中默认生成器的作用
120 1
|
4月前
|
存储
【源码共读】dotenv:从 .env 文件中读取环境变量
【源码共读】dotenv:从 .env 文件中读取环境变量
236 1
|
前端开发
DSP开发软件css(10)使用基础(汉化、工程导入、设置目标配置文件、选择仿真器和芯片型号、添加文件|库路径、编译下载等操作)
DSP开发软件css(10)使用基础(汉化、工程导入、设置目标配置文件、选择仿真器和芯片型号、添加文件|库路径、编译下载等操作)
170 0