js使用单例模式优雅的写一个配置文件
2019-02-25 本文已影响0人
五年高考
先BB两句
js项目中通常都会有一个config.js文件存在,这里面存储了这个项目的各种配置信息,比如api地址、mysql链接配置、redis链接配置等等。
看似一个简单的东西如果运用于项目中就会出现各种问题:多个api地址或者mysql,redis链接配置如何处理?多个环境应该如何去区分?如果全写在业务逻辑里面就会造成上线或者其他时候出现BUG;
下面就来讲讲如何使用单例模式来写一个配置文件。
实现
- 当然是新建config.js文件啦。
2.代码不多我就直接全贴下来:
export class ConfigEntity {
static _Singleton = null;
/**
* 环境变量
* 暂定 1位生产环境 2为外网测试 3为内网测试 4为开发环境
*/
Environmental = 1;
/**
* api地址,配置多后台地址
*/
Apis = {};
/**
* 数据库配置 配置多数据库连接配置
*/
MySql = {}
static Entity() {
if (this._Singleton === null) {
const entity = new Config();
switch (entity.Environmental) {
case 1:
entity.Apis = {
api1: "http://www.baidu.com/apis",
api2: "http://www.google.com/apis",
api3: "http://www.soso.com/apis",
}
entity.MySql = {
db1: {},
db2: {}
}
// .......
break;
case 2:
entity.Apis = {
api1: "http://test1.baidu.com/apis",
api2: "http://test1.google.com/apis",
api3: "http://test1.soso.com/apis",
}
entity.MySql = {
db1: {},
db2: {}
}
break;
case 3:
entity.Apis = {
api1: "http://test.baidu.com/apis",
api2: "http://test.google.com/apis",
api3: "http://test.soso.com/apis",
}
entity.MySql = {
db1: {},
db2: {}
}
break;
case 3:
entity.Apis = {
api1: "http://dev.baidu.com/apis",
api2: "http://dev.google.com/apis",
api3: "http://dev.soso.com/apis",
}
entity.MySql = {
db1: {},
db2: {}
}
break;
default:
entity.Apis = {
api1: "http://dev.baidu.com/apis",
api2: "http://dev.google.com/apis",
api3: "http://dev.soso.com/apis",
}
entity.MySql = {
db1: {},
db2: {}
}
break;
}
this._Singleton = entity;
}
return this._Singleton;
}
}
const Config = ConfigEntity.Entity;
export default Config;
使用方式
- 在其他配置好之后不同的环境只需要修改一下Environmental参数即可
- 程序中
import Config,{ ConfigEntity } from './config';
console.log(Config());
console.log(ConfigEntity);
写在后面
使用此方式可以写配置文件可以很好的实现不同环境对于配置的初始化,也很好的规避了每次都会通过switch去耗费资源。
当然还有一种直接在程序如果Ini给某个静态变量直接赋值也是一个不错的写config的选择,这里就不赘述。