NodeJS 后端开发09 多环境Profiling优雅根据不同环境自适应

学委好久没有更新NodeJS专栏,还以为NodeJS冷门,没想到最近看到几个读者留言问怎么优雅的管理多环境的配置。

太忙了,写篇短文简单展示一下原理。正好基于前篇 【NodeJS 后端开发 07 MySQL数据库连接池开发生产应用 】简单尝试了mysql库来连接数据库。

本篇尝试一个更加优雅的方式,通过环境变量来控制程序动态加载不同的配置。

这个搞Java的同学最清楚,比如我们开发springboot应用的时候会放置多个application.yml。

然后部署的时候通过环境变量来选择配置。

这个用NodeJS来做就更加简单了

NODE_ENV=process.env.NODE_ENV
console.log('NODE_ENV:', NODE_ENV)

直接贴在node REPL 终端查看:

process对象为Node上下文的内置对象,可以直接获取,这个对象管理了node进程相关的数据。
比如 process.env就是我们获取环境变量设置的入口了(读者可以自行打印查看更多信息)。

配置一个环境变量,重试代码

export NODE_ENV=雷学委

打开node的终端

这里我们看到,设置的环境变量被进程内部读取到了。

继续根据环境自适应的profiling。

上面展示了设置不同变量代码中能够获取到该环境变量的值。

安照这个机制,我们可以把配置文件按照下面进行命名,让程序加载不同的文件名,比如下面:

  • config.dev.json
  • config.testing.json
  • config.prod.json

然后只需要写一份应用代码:

复制下面代码保存为app.js

//雷学委Demo代码
const NODE_ENV=process.env.NODE_ENV || 'dev'
console.log('NODE_ENV:', NODE_ENV)
//定位当前目录下的config.<环境类型>.json
const configPath = __dirname + '/config.' + NODE_ENV + '.json'
console.log('configPath:', configPath)
//加载并打印数据库的配置细节
const dbConfig = require(configPath)
console.log('dbConfig:', dbConfig)

我们直接来看效果;


运行代码在这:

#开发环境启动应用
node app.js
#测试环境启动应用
export NODE_ENV=testing && node app.js
#生产环境启动应用
export NODE_ENV=prod && node app.js

很轻松吧,一份代码根据不同的环境适配了。
实际运行应用app.js的服务器,上面会配置环境变量NODE_ENV为对应的dev/testing/prod值。
上面代码仅为原理展示。

好了到这里读者应该能够懂得profling如何做了。(可以三连了)

下面看看为什么。

为啥搞这么多外部配置,直接写在代码里面根据主机名字加载不好么?

一般企业会有大量的服务器,然后会把服务器划分为几类,比较典型的划分为:

很多中大公司会有下面这样一个划分:

这样能够把一个应用层层把关提拔到最上层的生产环境(production)。

学委想对小白说的: 比如说一个游戏的新功能,往往会经过开发机器调试,然后大量测试,把大量的潜在的重要的bug解决了,提拔到预发布,最后到生产环境。这个过程通过一些列的自动化测试,回归测试,可以大大保证系统的质量。还有一种高端玩法就是灰度发布,加上这个制度,这就是我们常说产品平滑上线的流程了。

这好像扯远了,产品发布这一套能再写亿篇!

我们回到主题,通常就是只开发一份代码,发布到不同环境之后,程序动态的连接到正确的数据库,加载对应的数据,数据虽不同但是程序在任意环境的行为要绝对一致。

这里配置外部化考量是:配置外部化可以减少代码跟环境的耦合

而不是发布一个类型的环境,就得修改代码。

特别是互联网/金融项目都会有严苛的质量把关,哪怕是修改一个标点符号,整个产品提升的过程都得从开发环境重新来过。

因此,配置外部化很有必要。

那么,应用能否跟外部环境毫无关联?

比较有经验的朋友,可能会想匿名函数,或者亚马逊的lamda,或者serverless app(无服务器应用)

如果业务没有任何环境区分,那就可以做到程序跟环境没有耦合,这就充分的说明了serverless的一个优点!(没有耦合,意味着随便拿一个云服务器部署,即可轻松实现弹性伸缩了,但这并非此文出发点,有机会再说)

对了,学委还有这个可以关注长期阅读 =>雷学委趣味编程故事汇编
或者=> 雷学委NodeJS系列

持续学习持续开发,我是雷学委!
编程很有趣,关键是把技术搞透彻讲明白。
创作不易,请多多支持,点赞收藏支持学委吧!

更多代码可以查看/Star: LearnNodeJS代码下载

搞不定Serverless?让你秒懂掌握Profiling让一份程序优雅自适应相关推荐

  1. 【程序员】区区英语算什么,还搞不定了?

    内容简介 [程序员]区区英语算什么,还搞不定了? 必须学好英语,做社会主义好程序员 经常听到学编程的朋友抱怨英语难学:烦,头痛,不开心,愁死宝宝了,不学又不行不舒服斯基~~ 话说大多数程序员是男同胞吧 ...

  2. 大神,快来救救我,我搞不定啊

    着分享的精神混在IT圈,至今没名没利,之前有童鞋为我什么很多人都不愿意回答我们提的问题,其实不是我们不想回答,而是我们不是神,我们回答的越勤快,你的惰性也就越大,真心为你,却无人理解. 节奏一:大神, ...

  3. 焦头烂额一个上午还是搞不定,跪地相求大家,朋友帮忙啊。。。

    焦头烂额一个上午还是搞不定,跪地相求大家,朋友帮忙啊... Delphi / Windows SDK/API http://www.delphi2007.net/DelphiDB/html/delph ...

  4. 怎样让AI完成人类搞不定的任务?OpenAI提出迭代扩增法给AI设目标

    李林 编译整理 量子位 出品 | 公众号 QbitAI 人类:AI啊,给北京设计一套不堵车的交通系统吧! AI:想不堵车,只好-- 想让AI去完成这种庞大复杂的任务,怎样训练.怎样指导,是个非常严峻的 ...

  5. java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!

    点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! ​ 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢.经过了1 ...

  6. 阿里阿里,搞不定政企

    如果我们问一位关注科技产业,或者关注云计算.AI技术的朋友,4月11日的阿里云北京峰会上讲了什么.他应该马上会说,发布了通义千问啊. 这话确实没错.但仔细观察这场会,却会发现一个问题:嘉宾好像不太对. ...

  7. PDF编辑搞不定?迅读PDF大师,了解一下?

    工欲善其事,必先利其器.初入职场,想要快速提升自己的业务能力,专业知识必牢牢掌握,但常规的"职场基本功"也不可懈怠,比如Word.Excel.PPT.PDF等.不同岗位用到这些办公 ...

  8. 21考研 为啥看了那么多经验贴,还是搞不定考研?

    hello~~各位研宝们,大家晚上好呀~ 今天的大家又博学了吗? 为了让自己更加博学,掌握更过的考研知识和技巧,相信很多21考研er已经开始在网上搜罗经验贴了~~ 很聪明哦,看往届学长学姐的经验,的确 ...

  9. linux怎么打印xhci日志,原来linux里的xhci-hcd搞不定fl1000是这 - 精华区 - 优秀的Free OS(Linux)版 - 北大未名BBS...

    发信人: ILBSD (XMaster), 信区: Linux 标  题: 原来linux里的xhci-hcd搞不定fl1000是这原因 发信站: 北大未名站 (2011年05月09日14:10:52 ...

最新文章

  1. 瑞丽噪声与信噪比的关系_演出扩声系统的噪声与接地
  2. 数学篇(二) 方差、标准差、协方差
  3. flink的DAG可视化使用(visualizer的使用)
  4. 微信小程序把玩(二十一)switch组件
  5. linux 提取日志字段,记一次Linux下提取MySQL日志关键字段
  6. 关于idea的git账号与电脑的git账号不一致的问题。已解决!
  7. (操作系统题目题型总结)第二章:处理器管理
  8. 【李宏毅机器学习】Logistic Regression 逻辑回归(p11) 学习笔记
  9. linux的awk命令如何用?
  10. python调用r语言加载包错误_Python中调用R语言包指南.docx
  11. DataGridView 设置行不可见时,与货币管理器的位置关联的行不能设置为不可见
  12. three相机在模型上_一步步带你实现web全景看房——three.js
  13. 转专业申请麦吉尔大学计算机,我在麦吉尔大学学习数学专业……
  14. IFI Claims:2018年中国企业在美国申请专利数量7298件
  15. MapReduce优缺点
  16. android四大组件
  17. autoJS for 快手极速版 可运行
  18. Dockerfile文件解释
  19. NCBI参考序列RefSeq
  20. word调整页脚距离 顶端和低端的距离(叫页边距)

热门文章

  1. A股暴跌三日市值蒸发4.2万亿 股民人均浮亏超2万
  2. 华为机试—字符串处理专题
  3. php 关键词挖掘,如何挖掘长尾关键词
  4. Android展示PDF文件(文字,签章,签名)
  5. 基于OpenPGP的文件管理系统
  6. 基于Java科研项目申报管理系统
  7. 理解CentOS的Endpoint仓库是什么
  8. Spring入门——控制反转是什么鬼
  9. 为什么要进行个人知识管理(PKM)
  10. LZW 编解码算法实现与分析