我是nestJS
的新手,我想为现有应用程序和面临的问题设置.env
。
我有以下appModule
的自定义提供程序,
@Module({
providers: [
AbcService,
XyzService,
],
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'xxxxxxxx',
port: 3230,
username: 'xyz',
password: 'password',
database: 'xyz-db',
entities: [__dirname + '/entities/**/*.entity{.ts,.js}'],
synchronize: true,
migrationsRun: true,
logging: true,
}),
TypeOrmModule.forFeature([
Transaction,
Payment,
]),
KafkaModule.forRoot(serviceConfig),
],
exports: [],
controllers: [ServiceSubscriptionController],
})
export class TopicModule { }
我已按如下所示将其导入AppModule
中
@Module({
imports: [TopicModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
我想将这些内容保留在.env
中,并按照以下文档进行了尝试,
TypeOrmModule.forRootAsync({
imports: [ConfigModule.forRoot({
envFilePath: '.env',
})],
useFactory: async (configService: ConfigService) => {
return {
host: configService.get('HOST'),
type: 'mysql',
port: 3230,
username: 'xyz',
password: 'password',
database: 'xyz-db',
entities: [__dirname + '/entities/**/*.entity{.ts,.js}'],
synchronize: true,
migrationsRun: true,
logging: true,
}
},
inject: [ConfigService]
}),
我在.env
的根路径上有HOST
键-值对,如下所示,但是它从中读取未定义。
在package.json
中,
"start": "nest start",
"start:dev": "nest start --watch",
答案 0 :(得分:0)
如果您将文件路径传递给ConfigModule
方法,似乎Nest的fs.readFileSync(envFilePath)
将运行forRoot()
。如果要从根目录读取它,请从用户的主目录中删除envFilePath
选项,或设置完整的文件路径。
答案 1 :(得分:0)
我已按照以下说明在main.ts
中手动加载了配置。
import { config } from 'dotenv';
async function bootstrap() {
//factory method for normal TS app
await config();
const app = await NestFactory.create(AppModule);
现在我可以访问它了,
configService.get('HOST') // as provided in question
或作为process.env.HOST
注意:我必须使用forRootAsync
而不是forRoot
来访问process.env