config配置分离,即将环境常亮提取出,统一放置.env 文件下管理。
第一步:安装依赖
$ npm i --save @nestjs/config
第二步:模块中引入
// app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [ConfigModule.forRoot()],
})
export class AppModule {}
ConfigModule.forRoot 的配置参数有
ConfigModule.forRoot({ // 全局使用
isGlobal: true,
});
ConfigModule.forRoot({ // 不想加载 .env 文件,而是想简单地从运行时环境访问环境变量
ignoreEnvFile: true, //(就像 OS shell 导出一样,如 export DATABASE_USER=test)
});
ConfigModule.forRoot({. // 自定义env 文件路径
envFilePath: ['.env.development.local', '.env.development'],
});第三步:配置.env 常量
DB_DATABASE='database' DB_USERNAME='database' DB_PASSWORD='this is password' DB_HOST='127.0.0.1' DB_PORT='3306'
第四步:ConfigService 引入
要从 ConfigService 访问配置值,我们首先需要注入 ConfigService。与任何提供者一样,我们需要将其包含模块 - ConfigModule ,并导入将使用它的模块(除非将传递给 ConfigModule.forRoot() 方法的选项对象中的 isGlobal 属性设置为 true,就不用导入ConfigModule)如下:
// user.module.ts
@Module({
imports: [ConfigModule],
// ...
})然后将其注入到服务中
// user.service.ts
constructor(private configService: ConfigService) {}如果已经设置了 isGlobal为 true,就可以不用上述过程,直接在service中引入:
// user.service.ts
import {ConfigService} from "@nestjs/config";
@Injectable()
export class UserService {
constructor(
private readonly configService: ConfigService,
) {}
async index(req) {
let url = this.configService.get('DB_DATABASE'); // 读取env中常量
return {user: 'me'};
}
}第一步:自定义配置文件
// config/configuration.ts
export default () => ({
port: parseInt(process.env.PORT, 10) || 3000,
database: {
host: process.env.DATABASE_HOST,
port: parseInt(process.env.DATABASE_PORT, 10) || 5432
}
});第二步:将其引入模块
import configuration from './config/configuration';
@Module({
imports: [
ConfigModule.forRoot({
load: [configuration],
}),
],
})
export class AppModule {}www.haizhuan.tk