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

搞不定Serverless?让你秒懂掌握Profiling让一份程序优雅自适应学委好久没有更新 NodeJS 专栏 还以为 NodeJS 冷门 没想到最近看到几个读者留言问怎么优雅的管理多环境的配置 太忙了 写篇短文简单展示一下原理 正好基于前篇 NodeJS 后端开发 07MySQL 数据库连接池开发生产应用 简单尝试了 mysql 库来连接数据库 本篇尝试一个更加优雅的方式 通过环境变量来控制程序动态加载不同的配置 这个搞 Java 的同学最清楚 比如我们开发 springboot 应用的时候会放置多个 application yml 然后部署的时候通过环境变量来选择配置 这个用 Node

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) 

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

export NODE_ENV=雷学委 

继续根据环境自适应的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 

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

下面看看为什么。

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

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

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

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

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

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

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

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233046.html原文链接:https://javaforall.net

(0)
上一篇 2025年8月21日 下午7:01
下一篇 2025年8月21日 下午7:22


相关推荐

  • nvidia nvlink互联与nvswitch介绍

    nvidia nvlink互联与nvswitch介绍一 动机在 nvidia 推出目前这个方案之前 为了获得更多的强力计算节点 多个 GPU 通过 PCIeSwitch 直接与 CPU 相连 他们之间的 pcie3 0 16 有接近 32GB s 的双向带宽 但是当训练数据不停增长的时候 这个互联方案本身却成为了致命的系统瓶颈 如果不改进这个互联带宽 那么新时代 GPU 带来的额外性能就没法发挥出来 从而无法满足现实需求负载的增长 二 NVLink 为了解决这个问题 nvidia 开发了一个全新的互联构架 nvlink 单条 nvlink 是一种双工双路信道 其通过组合 32 条配

    2026年3月19日
    2
  • ST7789V+初始化代码调

    MyfirstblogonCSDN本文简单写一下本次调屏经过遇到的问题和解决方法,主要是怕以后遇到同样问题的时候又忘记了~1、屏分辨率是240×320,接口是16bitparalledatabusfor8080seriescpu,就是16位并口再加WR,RD,CS,RS接口,屏的复位可以采用RC上电复位电路。2、cpu这边输出的信号是320×240的,这里没写错,输

    2022年4月16日
    216
  • 如何转换excel表格的数值为千元单位

    如何转换excel表格的数值为千元单位

    2026年3月13日
    2
  • cs架构和bs架构的区别举例子_bs和cs架构哪个安全

    cs架构和bs架构的区别举例子_bs和cs架构哪个安全最近发现自己基础非常薄弱,问起CS/BS的概念和区别竟然只知道个皮毛。赶快找了个文章仔细学习。C/S结构 即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。早期的软件系统多以此作为首选设计标准。B/S结构 即Browser/Server(浏览器/服务…

    2025年10月23日
    4
  • java中的工作流要怎样实现_java工作流开发要怎么实现?

    java中的工作流要怎样实现_java工作流开发要怎么实现?Java工作流的应用在目前十分广泛,能够熟练的实现工作流也是一种本事,本篇文章就让小编带你了解下其中的实现关键。我们知道,工作流的实现主要依靠反射机制,想要实现它,首先我们先来创建一张工作流表创建一张工作流表如:主键|工作流Code|工作流内容其中工作流内容为Json格式工作流内容{“procCode”:”OPS”,”procName”:”c端补齐(乘客信息补全)”,”taskCo…

    2022年7月7日
    34
  • 如何使用Claude Code,看这一篇就够了

    如何使用Claude Code,看这一篇就够了

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号