首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nest.js中优雅的环境处理

Nest.js中优雅的环境处理
EN

Stack Overflow用户
提问于 2018-06-22 15:51:46
回答 1查看 15K关注 0票数 11

我正在探索如何将Nest.js用于目前测试覆盖率很小的关键应用程序。我们需要基于环境标志做出决策,主要是加载额外的快速中间件、不同的日志配置等等。我使用了环境变量作为在文档中描述的方法,但对于如何优雅地(隔离的、可测试的)处理进一步的分支有点不确定。我可以在根模块的configure钩子中处理所有这些问题,但是感觉会变得很混乱,即使我将它隔离到单独的方法中,而且可能有一个更好的解决方案。任何帮助都将不胜感激!谢谢!✌️

EN

回答 1

Stack Overflow用户

发布于 2019-03-21 15:42:00

这是我在配置项目时的解决方法,同时也是一个mongoose连接config/config.module.ts的例子。

代码语言:javascript
复制
import { Module } from '@nestjs/common';
import { ConfigService } from './config.service';

@Module({
  providers: [ConfigService],
  exports: [ConfigService],
})
export class ConfigModule {}

由于config/config.service.ts文件将不用于生产,所以.env文件

代码语言:javascript
复制
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];
  }
}

database/database.module.ts

代码语言:javascript
复制
import { Module } from '@nestjs/common';
import { databaseProviders } from './database.providers';

@Module({
  imports: [...databaseProviders],
  exports: [...databaseProviders],
})
export class DatabaseModule {
}

database/database.providers.ts

代码语言:javascript
复制
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,
    }),
  }),
];
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50991577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档