node.js - 在 main.ts 中使用 .env 文件中的数据 - NestJS
问题描述
NestJS 允许我们通过 ConfigModule 读取 .env 文件,我可以在我的模块中使用如下代码轻松地做到这一点
@Module({
imports: [ConfigModule.forRoot()],
providers: [
NVFullNameSearchService,
NVPartialNameSearchService,
NVPersistService,
],
controllers: [NvController],
})
但是上面的代码更多是在模块中处理,我如何从 main.ts 中的 .env 文件中读取内容。假设我需要为我的 Redis 服务设置端口和主机?
const microserviceOptions = {
name: 'plscorecard',
transport: Transport.REDIS,
options: {
url: 'redis://localhost:6379',
},
};
async function bootstrap() {
const app = await NestFactory.createMicroservice(
NVModule,
microserviceOptions,
);
app.listen(() => {
logger.log('NameVerification Redis microservice is listening ... ');
});
}
bootstrap();
如您所见,在这种情况下尚未创建应用程序。我应该直接使用dotenv吗?正如您在任何企业环境中所期望的那样,我有用于 DEV、QA、UAT 和生产的不同 env 文件。实现它的最简单/正确的方法是什么?
解决方案
感谢大家的支持。这是我修复它的方法
**app.module.ts**
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: `config/${process.env.NODE_ENV}.env`,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
现在模块有了正确的设置,剩下的就是从 main.ts 以一种更非传统但有记录的方式调用它
**main.ts**
import { Logger } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { Transport } from '@nestjs/microservices';
import { AppModule } from './app.module';
import { ConfigService } from '@nestjs/config';
async function bootstrap() {
const logger = new Logger('main');
const app = await NestFactory.create(AppModule);
const configService = app.get(ConfigService);
const REDIS_HOST = configService.get<string>('REDIS_HOST');
const REDIS_PORT = configService.get<number>('REDIS_PORT');
const microserviceOptions = {
transport: Transport.REDIS,
options: {
url: `redis://${REDIS_HOST}:${REDIS_PORT}`,
},
};
app.connectMicroservice(microserviceOptions);
const PORT = configService.get<number>('PORT');
const environment = configService.get<string>('NODE_ENV');
const title = configService.get<string>('ENVIRONMENT_TITLE');
await app.listen(PORT);
logger.log(
`${environment}, Microservice ready to receive Redis messages in PORT - ${PORT}\n Environment - ${title}`,
);
}
bootstrap();
推荐阅读
- c++ - VS Code C++ 自动完成用户定义不起作用
- ruby-on-rails - 如何从 elasticsearch-rails 调用 _count?
- python - 协助 discord.AuditLogAction
- python - 如何计算功率?
- spring-boot - 使用 VisualVM 通过 Kubernetes 集群后面的 JMX 监控 dockerised Spring Boot 应用程序内部
- node.js - 自学 discord.js 机器人?
- javascript - 为什么我的 PHP 代码没有回显 $_POST 数据?
- xcode - 是否有可能在 Xcode 中有一个依赖于协议目标的协议目标?
- html - 为什么这个网页将整个 HTML 正文放在一个
- python - for循环用于熊猫数据框子集的多个图