Nest.js 中的优雅环境处理
Posted
技术标签:
【中文标题】Nest.js 中的优雅环境处理【英文标题】:Elegant environment handling in Nest.js 【发布时间】:2018-12-02 03:30:51 【问题描述】:我正在探索将 Nest.js 用于目前测试覆盖率非常低的关键应用程序。我们需要根据环境标志做出决定,主要是加载额外的快速中间件、不同的登录配置等。我使用的环境变量方法为described in the documentation,但我有点不确定如何优雅(隔离、可测试)处理进一步分支。我可以在我的根模块的 configure
钩子中处理所有这些,但感觉它会变得一团糟,即使我将它隔离成单独的方法,并且可能有更好的解决方案。任何帮助将不胜感激!谢谢! ✌️
【问题讨论】:
【参考方案1】:这是我在配置项目时解决的方法,也是猫鼬连接的一个例子 config/config.module.ts
import Module from '@nestjs/common';
import ConfigService from './config.service';
@Module(
providers: [ConfigService],
exports: [ConfigService],
)
export class ConfigModule
因为 .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];
数据库/database.module.ts
import Module from '@nestjs/common';
import databaseProviders from './database.providers';
@Module(
imports: [...databaseProviders],
exports: [...databaseProviders],
)
export class DatabaseModule
数据库/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,
),
),
];
【讨论】:
这给出了以下错误Nest can't resolve dependencies of the MongooseModuleOptions (?)
以上是关于Nest.js 中的优雅环境处理的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以在不使用 Nest.js 中的 async/await 的情况下从数据库中获取数据?