文章
问答
冒泡
nodejs模仿spring boot根据环境使用配置文件

在spring boot的项目中,我们可以根据 spring.profiles.active参数设置当前启用的配置文件。这样,我们可以很方便的切换环境。

于是在Koa项目中,我们也模仿srping boot写一个配置文件加载的函数。

1.设计好目录结构

参考maven项目,配置文件的文件夹名称 resources,项目代码目录 server (这是一个nextjs项目,否则命名src会更好)

2.读取配置文件

在server文件夹下,创建 bootstrap文件夹,存放一些启动时需要加载的文件。配置文件读取类AppConfig 也放这里。

import _ from "lodash";
import args from "yargs";
import yaml from "js-yaml";
import fs from "fs";
const argv = args.argv;
const resources = __dirname+"/../../resources";
class AppConfig {

    public static instance : AppConfig ;
    private data : any = null;

    constructor() {
        this.loadConfig();
    }

    public static getInstance(){
        if(!this.instance){
            this.instance = new AppConfig();
        }
        return this.instance;
    }

    private loadConfig(){
        const env = _.get(process.env,"profiles.active") || argv.env;
        if( env ){
            let applicationJson = yaml.safeLoad(fs.readFileSync(resources+"/application"+(env?("-"+env):"")+".yaml","utf-8"));
            this.data = _.assign({},process.env,applicationJson);
        }else {
            let applicationJson = yaml.safeLoad(fs.readFileSync(resources+"/application.yaml","utf-8"));
            this.data = _.assign({},process.env,applicationJson);
            const active = _.get(this.data,"profiles.active");
            if( active ){
                let applicationActiveJson = yaml.safeLoad(fs.readFileSync(resources+"/application-"+active+".yaml","utf-8"));
                this.data =  _.assign({},this.data,applicationActiveJson)
            }
        }
    }

    get(key:string){
        return _.get(this.data,key);
    }
}
export default AppConfig.getInstance()

3.设置当前配置文件

由代码可见,在环境变量没有读取到profiles.active 的时候,回去读取 application.yml文件,如果其中有对应的profiles.active变量,则会去读取相应的配置文件。

4.使用配置文件

只需要improt这个类,需要的地方,直接 调用get即可

import config from "./bootstrap/AppConfig";
config.get("service-api.proxy-target")

spring boot
koa2
nodejs

关于作者

落雁沙
非典型码农
获得点赞
文章被阅读