在NestJS
項目中推薦使用nestjs-config
模塊來獲取配置。git
nestjs-config
提供了 config.get() 函數,可經過config.get('app.host')的方式來讀取配置。github
nestjs-config
地址:github.com/nestjs-comm…數據庫
通常來講,在程序中有如下方式能夠獲取配置:服務器
在此統一規定:全部程序配置信息 必須 經過 config.get() 來讀取,毫不在配置文件之外的範圍讀取環境變量。app
這樣作主要有如下幾個優點:函數
// app.module.ts 加載config文件夾中的配置文件
import { ConfigModule } from 'nestjs-config'
// 注意,這裏路徑要指向存放配置文件的config文件夾
ConfigModule.load(path.resolve(__dirname, '..', 'config', '**/!(*.d).{ts,js}')),
複製代碼
.env文件
用於配置各類線上敏感數據和服務器定製化數據,例如數據庫密碼,祕鑰,服務器ip等// env-unit.ts
import * as dotenv from 'dotenv'
dotenv.config()
/** * 格式化環境變量 * @param key 環境變量的鍵值 * @param defaultValue 默認值 * @param callback 格式化函數 */
const fromatValue = <T>(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
export {
port: envNumber('APP_PORT', 3000)
}
複製代碼
import {InjectConfig} from 'nestjs-config';
@Injectable()
class SomeService {
constructor(@InjectConfig() private readonly config) {
}
getAppHost() {
// 使用字符串加.的格式獲取配置
return this.config.get('app.port')
}
}
複製代碼