请参阅本文档
https://docs.nestjs.com/techniques/configuration
建议使用ConfigServicorder oder来使用环境变量。
因此在代码中,我们使用类似以下内容的代码:
config.get('PORT')
所有变量都在.env
文件中定义。
但是不建议在生产环境中使用.env
。那么如何部署呢?
为什么不对dotenv和process.env.PORT
使用标准方法?
答案 0 :(得分:1)
但是不建议在生产环境中使用.env。那么如何部署呢?
实际上,不建议提交您的.env文件。在生产中使用它们非常好:-)。
为什么不对dotenv和process.env.PORT使用标准方法?
它允许您将核心代码与负责提供配置数据的代码解耦。因此:
declare @term varchar(100) = 'abc~def~ghi~jkl~mno~pqr~'
; with mycte as (
select
value as string_value
, row_number() over (order by (select 1000) )as row_num
from string_split(@term,'~'))
select top 2 string_value
from mycte
where string_value<>''
order by row_num desc
进行一些手动更改/模拟是例如- a -痛苦 ,而嘲笑“ process.env
”非常简单ConfigService
的出现// // <公平地说,这不太可能发生,因为使用env。变量是加载配置数据的最常用方法,但仍然如此。 答案 1 :(得分:0)
有两个问题使ConfigService
的使用率降低。
第一
在任何环境中均不存在.env
文件时,在{p>
readFileSync
将失败:
dotenv.parse(fs.readFileSync(filePath))
即使[Nest] 63403 [ExceptionHandler] path must be a string or Buffer
TypeError: path must be a string or Buffer
at Object.fs.openSync (fs.js:646:18)
at Object.fs.readFileSync (fs.js:551:33)
at new ConfigService (../config/config.service.ts:8:38)
可用
process.env.API_KEY
将不返回任何内容。因此this.configService.get('API_KEY')
会迫使您使用ConfigService
文件,而dotenv则建议您反对:
不。强烈建议您不要使用“主要” .env文件和 “ environment” .env文件,例如.env.test。您的配置应有所不同 部署之间,并且您之间不应共享价值 环境。
https://github.com/motdotla/dotenv#should-i-have-multiple-env-files
第二
您必须导入配置模块并注入服务才能使用它。当您使用这样的环境变量
prod.env
配置服务没用。
在此处了解有关环境中配置的更多信息:https://12factor.net/config
答案 2 :(得分:0)
使用 @nestjs/config
(又名 ConfigModule
)使您的应用可以使用环境变量,无论它们来自 .env
文件还是在环境中设置。在本地使用 .env
文件,在生产环境中使用。