这篇文章主要介绍了如何在巢。js中配置环境变量,此处给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:
环境变量配置简述
程序在不同的环境下需要不同的环境变量,例如生产环境,测试环境以及开发环境所需要不同的数据库信息:链接地址,链接端口号,登录用户名和密码相关信息。为了解决这个问题需要进行相关操作。
在巢中最佳方案创建一个ConfigModule,该ConfigModule公开一个ConfigService,在ConfigService加载特有环境的.env文件。巢提供了@nestjs/配置开箱即用的依赖包。
配置
npm生态有很多相关的依赖包,比如最简单的:
yarn add dotenv-flow yarn add  @types/dotenv-flow - d
安装好了直接在主。ts使用:
import *, as dotenv 得到& # 39;dotenv-flow& # 39;/* * ,*导入,.env 环境 *大敌;https://www.npmjs.com/package/dotenv-flow ,*/dotenv.config ()
就可以使用对应的环境.env变量了,不过这样使用官方推荐软件包:@nestjs/配置:
yarn add @nestjs/配置
在app.module。ts中的forRoot静态方法配置环境变量.env解析:
import {, Module },得到& # 39;@nestjs/常见# 39; {},ConfigModule  import 得到& # 39;@nestjs/配置# 39; @Module ({ ,进口:[ConfigModule.forRoot ()) }) export class AppModule  {}
然后在项目根目录下新建.env文件:
DATABASE_USER=DATABASE_PASSWORD=DATABASE_NAME=DATABASE_PORT=DATABASE_HOST=
自定义env路径
如果.env需要细化生产,测试和开发环境可以按照下面进行配置:
ConfigModule.forRoot ({ ,envFilePath: [& # 39; .env.development.local& # 39;,, & # 39; .env.development& # 39;], })
其中排序越前面则优先级最高,但在启动命令中设置环境变量则是最高,例如:
export DATABASE_USER=root ,,, nest 开始
自定义配置文件
对于复杂的项目,需要把用到的可配置变量需要收集起来,比如新建src/config/配置。ts:
export default (),=祝辞,({ ,端口:方法(process.env.PORT, 10), | |, 3000年, ,数据库:{ 主持人:才能,process.env.DATABASE_HOST | |, & # 39; localhost # 39; ,,端口:方法(process.env.DATABASE_PORT, 10), | |, 3306 ,} })
然后在ConfigModule。forRoot加载:
import configuration 得到& # 39;。/config/配置# 39; @Module ({ ,进口:[ ConfigModule.forRoot({才能 ,,,负载:【配置】 })才能 ,) }) export class AppModule  {}
读取配置变量
如果需要读取相关的配置变量需要用到ConfigService,需要在用到的* .module。ts文件引入:
@Module ({ ,进口:[ConfigModule], ,//? })
如果涉及的很多地方要写,每个模块都要引入很烦的人,可以在上面的app.module。ts
添加一个字段:
import configuration 得到& # 39;。/config/配置# 39; @Module ({ ,进口:[ ConfigModule.forRoot({才能 ,,,isGlobal:没错, ,,,负载:【配置】 })才能 ,) }) export class AppModule  {}
然后在构造函数注入使用:
import {, ConfigService },得到& # 39;@nestjs/配置# 39; 构造函数(private configService: configService), {}
获取配置变量例如:
const dbUser =, this.configService.get(& # 39; DATABASE_USER& # 39;) const dbHost =, this.configService.get (& # 39; database.host& # 39;)
序列化
序列化指的是程序在网络响应中返回对象发送之前的过程,将提供的信息要进行转换和清理才能发给客户端:比如查询某个用户,一般来说可以返回当前用户实体信息,但里面的密码信息是不可以发送给客户端的,所以这边要做一些转换。
还好巢提供一个class-transformer相当好用的软件包:
yarn add class-transformer
比如在下列的用户实体信息排除密码信息:
import {, Exclude },得到& # 39;class-transformer& # 39; export class  UserEntity { id:,数量 ,firstName:字符串; ,姓:字符串; ,@Exclude () ,密码:字符串; ,构造函数(部分:Partial如何在Nest.js中配置环境变量