Ste*_*ven 6 environment-variables node.js typescript nestjs
我正在探索将Nest.js用于目前测试覆盖率很小的关键应用程序。我们需要根据环境标志做出决定,主要是加载其他表达中间件,不同的loggin配置等。我使用的是文档中所述的环境变量方法,但不确定如何优雅(隔离,可测试)处理进一步的分支。我可以在根模块的configure
钩子中处理所有这些问题,但是即使我将其隔离到单独的方法中,也会感到混乱,并且可能会有更好的解决方案。任何帮助将不胜感激!谢谢!??
小智 10
这是配置项目时解决的方法,也是猫鼬连接 config / config.module.ts的示例
import { Module } from '@nestjs/common';
import { ConfigService } from './config.service';
@Module({
providers: [ConfigService],
exports: [ConfigService],
})
export class ConfigModule {}
Run Code Online (Sandbox Code Playgroud)
由于.env文件将不用于生产 config / config.service.ts
import * as dotenv from 'dotenv';
import * as fs from 'fs';
export class ConfigService {
MONGODB_URI: string;
private readonly envConfig: { [key: string]: string };
constructor() {
if (
process.env.NODE_ENV === 'production' ||
process.env.NODE_ENV === 'staging'
) {
this.envConfig = {
MONGODB_URI: process.env.MONGODB_URI,
};
} else {
this.envConfig = dotenv.parse(fs.readFileSync('.env'));
}
}
get(key: string): string {
return this.envConfig[key];
}
}
Run Code Online (Sandbox Code Playgroud)
database / database.module.ts
import { Module } from '@nestjs/common';
import { databaseProviders } from './database.providers';
@Module({
imports: [...databaseProviders],
exports: [...databaseProviders],
})
export class DatabaseModule {
}
Run Code Online (Sandbox Code Playgroud)
database / database.providers.ts
import { ConfigModule } from '../config/config.module';
import { ConfigService } from '../config/config.service';
import { MongooseModule } from '@nestjs/mongoose';
export const databaseProviders = [
MongooseModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (config: ConfigService) => ({
uri: config.get('MONGODB_URI'),
useNewUrlParser: true,
}),
}),
];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3472 次 |
最近记录: |