Javascript 如何在模块导入/配置中设置.env变量
我想在我的应用程序中使用Javascript 如何在模块导入/配置中设置.env变量,javascript,node.js,typescript,dependency-injection,nestjs,Javascript,Node.js,Typescript,Dependency Injection,Nestjs,我想在我的应用程序中使用.env文件 我为此创建了两个文件(一个模块和一个服务): config.module.ts import {Module} from '@nestjs/common'; import {ConfigService} from './config.service'; @Module({ providers: [{ provide: ConfigService, useValue: new ConfigService(`${proc
.env
文件
我为此创建了两个文件(一个模块和一个服务):
config.module.ts
import {Module} from '@nestjs/common';
import {ConfigService} from './config.service';
@Module({
providers: [{
provide: ConfigService,
useValue: new ConfigService(`${process.env.NODE_ENV || 'development'}.env`),
}],
exports: [ConfigService],
})
export class ConfigModule {}
import * as dotenv from 'dotenv';
import * as fs from 'fs';
export class ConfigService {
private readonly envConfig: {[key: string]: string};
constructor(filePath: string) {
// stock the file
this.envConfig = dotenv.parse(fs.readFileSync(filePath));
}
// get specific key in .env file
get(key: string): string {
return this.envConfig[key];
}
}
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { EnvService } from './env';
import { HelloModule } from './module/hello.module';
import { ContentModule } from './module/content.module';
import { CategoriesModule } from './module/categories.module';
import { AuthorModule } from './module/author.module';
const env = new EnvService().getEnv();
@Module({
imports: [
// connect to the mongodb database
MongooseModule.forRoot(`mongodb://${env.db_user}:${env.db_pass}@${env.db_uri}:${env.db_name}/${env.db_name}`, env.db_option),
// ping module
HelloModule,
// data module
ContentModule,
CategoriesModule,
AuthorModule,
],
})
export class RootModule {}
config.service.ts
import {Module} from '@nestjs/common';
import {ConfigService} from './config.service';
@Module({
providers: [{
provide: ConfigService,
useValue: new ConfigService(`${process.env.NODE_ENV || 'development'}.env`),
}],
exports: [ConfigService],
})
export class ConfigModule {}
import * as dotenv from 'dotenv';
import * as fs from 'fs';
export class ConfigService {
private readonly envConfig: {[key: string]: string};
constructor(filePath: string) {
// stock the file
this.envConfig = dotenv.parse(fs.readFileSync(filePath));
}
// get specific key in .env file
get(key: string): string {
return this.envConfig[key];
}
}
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { EnvService } from './env';
import { HelloModule } from './module/hello.module';
import { ContentModule } from './module/content.module';
import { CategoriesModule } from './module/categories.module';
import { AuthorModule } from './module/author.module';
const env = new EnvService().getEnv();
@Module({
imports: [
// connect to the mongodb database
MongooseModule.forRoot(`mongodb://${env.db_user}:${env.db_pass}@${env.db_uri}:${env.db_name}/${env.db_name}`, env.db_option),
// ping module
HelloModule,
// data module
ContentModule,
CategoriesModule,
AuthorModule,
],
})
export class RootModule {}
问题是,在我的主模块中,我想连接到mongo
,但我不知道如何恢复变量,因为模块在中声明:
实际上,这是一门给我提供信息的课程
root.module.ts
import {Module} from '@nestjs/common';
import {ConfigService} from './config.service';
@Module({
providers: [{
provide: ConfigService,
useValue: new ConfigService(`${process.env.NODE_ENV || 'development'}.env`),
}],
exports: [ConfigService],
})
export class ConfigModule {}
import * as dotenv from 'dotenv';
import * as fs from 'fs';
export class ConfigService {
private readonly envConfig: {[key: string]: string};
constructor(filePath: string) {
// stock the file
this.envConfig = dotenv.parse(fs.readFileSync(filePath));
}
// get specific key in .env file
get(key: string): string {
return this.envConfig[key];
}
}
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { EnvService } from './env';
import { HelloModule } from './module/hello.module';
import { ContentModule } from './module/content.module';
import { CategoriesModule } from './module/categories.module';
import { AuthorModule } from './module/author.module';
const env = new EnvService().getEnv();
@Module({
imports: [
// connect to the mongodb database
MongooseModule.forRoot(`mongodb://${env.db_user}:${env.db_pass}@${env.db_uri}:${env.db_name}/${env.db_name}`, env.db_option),
// ping module
HelloModule,
// data module
ContentModule,
CategoriesModule,
AuthorModule,
],
})
export class RootModule {}
请查看文档中的。使用异步配置,您可以插入依赖项并将其用于配置:
MongooseModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
uri: `mongodb://${configService.get(db_user)}:${configService.get(db_pass)}@${configService.get(db_uri)}:${configService.get(db_name)}/${configService.get(db_name)}`,
}),
inject: [ConfigService],
});