【NestJS】配置信息与环境变量

您所在的位置:网站首页 环境变量lshost 【NestJS】配置信息与环境变量

【NestJS】配置信息与环境变量

2023-03-17 15:16| 来源: 网络整理| 查看: 265

在NestJS项目中推荐使用nestjs-config模块来获取配置。

nestjs-config 提供了 config.get() 函数,可通过config.get('app.host')的方式来读取配置。

nestjs-config 地址:github.com/nestjs-comm…

最佳实践 获取配置

一般来说,在程序中有以下方式可以获取配置:

硬代码,直接写死。- ❌ 可维护性低 写死在ts文件,例如config/app.ts中。 - ❌ 无法区分环境进行配置 直接读取.env文件。 - ❌ 虽然解决了环境变量问题但是不推荐 环境变量存储在 .env中,配置信息保存在ts文件中,然后使用 config.get() 函数来读取。- ✅ 最佳实践 编码规范

在此统一规定:所有程序配置信息 必须 通过 config.get() 来读取,绝不在配置文件以外的范围读取环境变量。

设计理念

这样做主要有以下几个优势:

定义分明,config.get() 读取的是配置信息。.env 文件保存的是环境变量,在不同环境下可以配置不同的内容。 代码健壮性, config.get() 在 .env 文件之上多出来一个抽象层,会使代码更加健壮,更加灵活。 nestjs-config 引入方式 // app.module.ts 加载config文件夹中的配置文件 import { ConfigModule } from 'nestjs-config' // 注意,这里路径要指向存放配置文件的config文件夹 ConfigModule.load(path.resolve(__dirname, '..', 'config', '**/!(*.d).{ts,js}')), 复制代码使用示例 .env文件用于配置各种线上敏感数据和服务器定制化数据,例如数据库密码,秘钥,服务器ip等 通过dotenv库读取env文件中的环境变量并进行格式化,封装成通用的方法 // env-unit.ts import * as dotenv from 'dotenv' dotenv.config() /** * 格式化环境变量 * @param key 环境变量的键值 * @param defaultValue 默认值 * @param callback 格式化函数 */ const fromatValue = (key: string, defaultValue: T, callback: (value: string) => T): T => { const value: string | undefined = process.env[key] if (typeof value === 'undefined') { return defaultValue } return callback(value) } export const env = (key: string, defaultValue: string = '') => fromatValue(key, defaultValue, value => value) export const envNumber = (key: string, defaultValue: number = 0) => fromatValue(key, defaultValue, value => Number(value)) export const envBoolean = (key: string, defaultValue: boolean = false) => fromatValue(key, defaultValue, value => value === 'true') 复制代码 在config文件夹下新建app.ts, 通过使用env(), envNumber(),envBoolean()方法来读取.env并格式化配置,同时第二个参数可设置默认值 // config/app.ts export { port: envNumber('APP_PORT', 3000) } 复制代码 在service中通过依赖注入的方式使用config import {InjectConfig} from 'nestjs-config'; @Injectable() class SomeService { constructor(@InjectConfig() private readonly config) { } getAppHost() { // 使用字符串加.的格式获取配置 return this.config.get('app.port') } } 复制代码


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3