nestjs 配置管理简单说明

nestjs 配置管理是一个独立的模块,机制上不像midwayjs的玩法,直接提供了装饰器可以快速获取,但是nestjs 是以模块的模式提供的,同时支持范型模式,当然有支持midwayjs 接口定义获取的模式(自动进行对象转换),以下是一个简单玩法

基于yaml的简单实例

内容实际来自官方文档,我做了一些简单调整,使用了多模块的模式

  • 配置
http:
  host: "localhost"
  port: 8080

db:
  postgres:
    host: "localhost"
    port: 5432
    database: "mydb"
    username: "user"
    password: "password"
  sqlite:
    database: "db.sqlite"
  • 宿主应该暴露全局配置模块
  imports: [
    ConfigModule.forRoot({
      isGlobal: true, // 此处注册为了全局模块,子模块就可以直接通过ConfigService 获取了
      load: [configuration],
    }),

configuration 定义

import { readFileSync } from 'fs';
import { join } from 'path';
import * as yaml from 'js-yaml';

const YAML_CONFIG_FILENAME = 'app.yaml';

export default () => {
  const filePath = join(__dirname, '..', 'conf', YAML_CONFIG_FILENAME);
  const file = readFileSync(filePath, 'utf8');
  const config = yaml.load(file) as Record<string, any>;
  return config;
};
  • 子模块通过ConfigService 获取实体数据

接口类型定义,可以让ConfigService 自动帮助我们进行对象处理

export interface PGDBConfig {
  host: string;
  port: number;
  username: string;
  password: string;
  database: string;
}

export interface HttpConfig {
  host: string;
  port: number;
}

export interface SQLiteDBConfig {
  database: string;
}

export interface AppConfig {
  http: HttpConfig;
  db: {
    postgres: PGDBConfig;
    sqlite: SQLiteDBConfig;
  };
}

使用配置(注意不太好的是暂时没有提供直接获取所有的,对于配置是基于字符串格式获取的)

import { Controller, Get } from '@nestjs/common';
import { ModuleBService } from './moduleb.service';
import {ConfigService} from  "@nestjs/config"
import  type {PGDBConfig} from "./config"
@Controller("mb")
export class ModuleBController {
  constructor(private readonly moduleBService: ModuleBService, private readonly configService: ConfigService) {}

  @Get("/")
  getHello(): string {
    const query = this.configService.get<PGDBConfig>('db.postgres');
    return `Host: ${JSON.stringify(query)}, Message: ${this.moduleBService.getHello()}`;
  }
}

说明

从使用上midwayjs 的似乎是是挺不错的实践,但是nestjs 比较符合nestjs 的模块,服务,ioc 的套路,同时注入配置注册为全局,我们的子模块使用也是很不错的,官方文档很值得看看

参考资料

https://docs.nestjs.com/techniques/configuration

posted on 2025-11-28 08:00  荣锋亮  阅读(0)  评论(0)    收藏  举报

导航