Nestjs框架: 多环境参数配置

NestJS使用gRPC实现微服务通信 gRPC 基于 Protocol Buffers(protobuf)作为接口定义语言(IDL),意味着你可以使用 protobuf 来定义你的服务接口,gRPC生成的代码可以用于多种语言(C++, Java, Python, Go, C#, Ruby, Node.js),所以使用gRPC就能实现跨语言之间进行微服务通信。此时启动项目还是会报错的,因为我们还没有创建proto文件和内容的写入,如下是对proto文件的配置。gRPC 基于根据可远程调用的功能(方法)定义服务的概念。 阅读详情

多环境配置方案比较:dotenv vs config


1 )dotenv库

  • npmjs.com/package/dotenv
  • 应用广泛,前后端, 解析.env文件,挂载到 process.env 属性上去
  • 安装:$ npm i -S dotenv
  • 按照官方示例配置
  • 在.env文件上配置,对嵌套的数据不太友好,需要自行处理

2 )config库

  • npmjs.com/package/config

  • nodejs环境读取配置文件的包

  • 如果想要支持 .yaml 文件,则需要安装 js-yaml 库来进行支持

  • 对嵌套文件支持友好

  • 新建config/default.json文件, 支持嵌套结构

    {
      "x":1 ,
      "y": {
        "ss":"2"
      }
    }
    
  • 用法

    const config = require('config')
    const yConfig = config.get('y')
    
  • 进阶用法

    • 合并不同环境的配置
    • 新建 config/production.json
    • 如果在 production 环境下,它会自动合并 default.json 中的配置数据
  • 同样的,支持 yaml 格式, 这里是 defautl.yaml

    # default.yaml
    token: xxxx
    db: 
      host: 'localhost'
      port: 2222
    
    • 下面是procuction.yaml
      db: 
        host: 'yourdomain.com'
        port: 2222
      
    • 同样能够解析出来
  • 平时用的时候,也安装下 cross-env, 在package.json中的 scripts

    scripts: {
      'dev': 'cross-env NODE_ENV=development node index.js'
      'prod': 'corss-env NODE_ENV=production ndoe index.js'
    }
    
    • 这样可以 根据环境来读取对应的yaml配置
  • 注意,以上不仅可以在Nodejs中使用,在前端框架中也可以使用

Nest官方方案:使用config设置配置模块


1 )@nestjs/config 这个模块内置的是 .dotenv 库

  • 安装:$ npm i -S @nestjs/config

  • 新建 .env文件,配置一些常用的配置

  • 在 app.module.ts 中配置,在这里配置后,相关 controllers 和 providers 都可以使用

    import { ConfigModule } from '@nestjs/config'
    
    @Module({
      // forRoot() 方法就是读取根目录下的 .env 文件
      imports: [ConfigModule.forRoot(isGlobal: true), UserModule]
    })
    
  • 注意,如果 import { ConfigService } from '@nestjs/config' 直接在UserModule之类的模块中使用,会报错

  • 需要作为一个 @Module 的部分,也就是新建一个user.module.ts文件在@Module中设置 imports 添加一个ConfigModule.forRoot()

  • 之后在user.conftroller.ts 中才能正常使用

  • 正常来说,如果不使用 isGlobal 配置,就会出现如上问题,所以可以在如上的代码示例中,也就是 app.module.ts 中使用

  • 全局配置是推荐的,不建议在每个模块中单独使用

  • 通常 .env 中配置的都是字符串,我们会单独定义一个 enum 枚举的文件来对应读取

  • 这样我们就不用在关键代码中修改字符串了

2 )嵌套 yaml 文件读取

  • 需要使用 js-yaml 库来支持

  • 新建 config/config.yaml

    db:
      mysql1:
        host: 127.0.0.1
        name: mysql-dev
        port: 3306
      mysql2:
        host: 127.0.0.1
        name: mysql-dev1
        port: 3306
    
  • 新建 src/configuration.ts

    import { readFileSync } from 'fs'
    import * as yaml from 'js-yaml'
    import { join } from 'path'
    
    const YAML_CONFIG_FILENMAE = 'config.yaml'
    const filePath = join(__dirname, '../config', YAML_CONFIG_FILENMAE)
    
    // 使用函数来导出,因为 ConfigModule 中有一个load方法,需要导入一个函数
    export defualt () => {
      return yaml.load(readFileSync(filePath, 'utf8'))
    }
    
  • 使用,在 app.module.ts 中

    import { ConfigModule } from '@nestjs/config'
    import { Module } from '@nestjs/common'
    import { UserModule } from './user/user.module'
    import Configuration from './configuration'
    
    // const envFilePath = `.env.${process.env.NODE_ENV || 'development'}`
    
    @Module({
      imports: [
        ConfigModule.forRoot({
          isGlobal: true,
          // envFilePath,
          load: [Configuration]
        }),
        UserModule,
      ]
    })
    
  • 这样,在user.controller.ts中 就可以读取到配置文件了

  • 有了这些东西,我们就可以扩展用法了

    • 新建 config/config.production.yml
    • 新建 config/config.development.yml
  • 这样,公共的配置,放在 config.yml 文件中,使用 _.merge 来合并两个配置

  • 分环境来分别配置,后续读取的时候,还是基于process.env.NODE_ENV 来读取对应的配置数据

第三方库config读取json文件配置


1 ) 安装

  • $ npm i -S config

2 ) 配置

  • $ mkdir config
  • $ vi config/default.json
  • $ vi config/development.json
  • $ vi config/production.json
    // default.json
    {
      "database": {
        "host": "localhost",
        "port": 3306
      }
    }
    
    // development.json
    {
      "database": {
        "dbname": "dev",
        "username": "root",
        "password": "root"
      }
    }
    
    // ...
    

3 )使用

// app.module.ts
import * as config from 'config'

console.log(config.get('database')) // 就可以使用了

再结合环境使用,npm i -D cross-env, 结合 package.json

scripts: {
  "start": "cross-env NODE_ENV=development node dist/index.js"
}

基本用法就是如上

进阶用法参考:github.com/node-config/node-config

还有一个库:github.com/nestjsx/nestjs-config

nestjs-config:nestjs配置模块 巢状设定模组 参照官方@ nestjs / config 描述 基于的配置模块。 区别 删除dotenv支持,转向js-yaml支持 官方结构过于复杂 load功能关闭,此只能加载配置,直接配置文件就行,场景不明 待支持: load增加加载类的可能性,用于扩展configService configService在读取时可能发生错误,因为key不存在,发生错误 安装 $ npm i @donews/nestjs-config 快速开始 预先一个目录结构,其中包含${rootPath}/config /root /config development.yaml /src app.module.ts 1.模块介绍 import { Module } from '@nestjs/common' ; import { ConfigModule 立即下载

相关推荐

nestjs-config:使用dotenv的nestjs的配置模块

Nestjs配置 NestJ的配置组件。 产品特点 使用Glob加载您的配置文件 感谢支持不同的环境配置 在运行时更改和加载配置 安装 纱 yarn add nestjs-config NPM npm install nestjs-config --save 入门 假设我们在项目中有一个名为src/config的文件夹,其中包含几个配置文件。 /src ├── app.module.ts ├── config │ ├── express.ts │ ├── graphql.ts │ └── grpc.ts 让我们在app.module.ts注册配置模块 import { Mo

一文带你搞定Nestjs项目中的配置文件(四种方案)!

应用程序通常在不同的环境中运行,根据环境的不同,应该使用不同的配置设置。例如,通常本地环境依赖于特定的数据库凭据,仅对本地 DB 实例有效,生产环境将使用一组单独的 DB 凭据。由于配置变量会更改,所以最佳实践是将配置变量存储在环境中。应用程序通常在不同的环境中运行,根据环境(Development,Production)的不同,应该使用不同的配置设置。使用第三方的包config,可以方便的读取配置信息,但是校验却需要在读取的位置来加,对于不需要验证,而需要全局使用的配置项可以使用这种方式;官方的。

而世之奇伟、瑰怪,非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也! 4686

机理模型与数据模型融合的方式

风电场的发电量受到多种因素的影响,包括但不限于风速、温度、空气密度等。尽管这些环境变量可以直接测量并用作模型输入,但它们与发电量之间的关系往往是复杂的非线性关系。通过引入基于物理定律计算出的理论发电量作为额外特征,可以为数据驱动模型提供更丰富的信息,从而提高预测精度。在这个案例中,我们将使用贝茨理论(Betz Limit)来计算风电场的理论发电量,并将其作为一个新的特征添加到数据集中。然后,我们使用增强后的数据集训练一个简单的神经网络模型来进行发电量预测。

金石软件 4810

如何用nest中对环境变量等文件进行配置

nest.js中对环境变量等配置文件的设置

qq_63204040的博客 1551

Python声音识别实战:从音频处理到智能分类

本文详细介绍了使用Python进行声音识别的完整实战流程。从音频预处理、特征提取(如MFCC)到构建分类模型(SVM、CNN),并最终实现一个实时环境音分类器。文章以Python为核心工具,结合librosa等库,为开发者提供了从理论到实践的清晰路径,适用于智能家居、工业监测等多种应用场景。

weixin_29064009的博客 325

StarUML最新版汉化与破解二合一教程:5分钟搞定永久使用

本文提供StarUML最新版的高效使用指南,涵盖从安装到深度定制的全流程优化方案。包括软件获取最佳实践、界面个性化设置、核心建模技巧、团队协作策略及性能优化建议,帮助架构师和开发团队提升UML建模效率。特别推荐版本控制集成和文档自动化输出方案,适用于各类规模的项目开发。

weixin_42530732的博客 454

前端 常见的环境配置方式以及nestjs环境配置

前端 常见的环境配置方式以及nestjs环境配置

weixin_58555796的博客 2020

CentOS7下通过YUM源高效部署Zabbix7 Agent指南

本文详细指导在已结束生命周期的CentOS7系统上,通过更换YUM源(如阿里云镜像)并添加Zabbix官方仓库,高效部署Zabbix7 Agent。文章涵盖从源配置、软件安装、关键参数修改到服务启动与防火墙设置的全流程,帮助用户解决依赖错误,快速建立服务器监控。

weixin_29230059的博客 270

小满nestjs(第九章 nestjs Session)

session 是服务器 为每个用户的浏览器创建的一个会话对象 这个session 会记录到 浏览器的 cookie 用来区分用户。我们使用的是nestjs 默认框架express 他也支持express 的插件 所以我们就可以安装express的session。然后在main.ts 引入 通过app.use 注册session。前端 vue3 ts element-plus fetch。我们可以看到 session 已经存到了浏览器。需要智能提示可以装一个声明依赖。跨域我用了本地dev 解决的。....

qq1195566313的博客 1万+

手把手教你利用qemu搭建银河麒麟V11 arm环境

在Windows环境下,初学者或企业用户常通过VMware、VirtualBox等虚拟机软件安装Ubuntu、Red Hat等Linux系统,这类工具更侧重X86等复杂指令集架构(CISC,常见于Intel、AMD处理器)的虚拟化。而QEMU是一款开源的虚拟机监视器与模拟器,核心优势在于可模拟ARM、MIPS、RISC-V等精简指令集架构(RISC)的处理器并提供虚拟化能力,更适合对虚拟化技术有一定了解的用户。可能是电脑性能问题,安装过程比较慢,需要耐心等待。等操作系统下载完成后,进行安装了。

huanhuanzhou blog 2457

用Python+NumPy手把手实现分数阶傅里叶变换(FRFT),搞定线性调频信号分析

本文详细介绍了如何使用Python和NumPy实现分数阶傅里叶变换(FRFT),特别针对线性调频信号(Chirp信号)分析。通过从零开始的代码实现和可视化案例,展示了FRFT在时变信号处理中的强大能力,帮助工程师和研究人员高效分析频率随时间变化的信号。

weixin_29062823的博客 218

NestJS Config装饰器详解:@Configurable与@ConfigParam实战

NestJS Config模块是一个强大的配置管理工具,它利用dotenv实现环境变量的加载和管理。本文将深入探讨该模块提供的@Configurable和@ConfigParam装饰器,帮助开发者轻松实现配置参数的注入与使用,提升应用的灵活性和可维护性。 ## 核心装饰器简介 📚 NestJS Config模块提供了两个核心装饰器,用于简化配置参数的获取与使用: ### @Configur

gitblog_00520的博客 434

逆向分析顶象5代各类验证码类型的图片还原方法(附源码)

6.刷新滑块验证码图片,会进入之前的for循环断点,分析此处的代码会发现,该循环循环了处理了n字符串的值,取出n字符中的值并使用charCodeAt生成Unicode 编码,然后又调用了a函数,如果a函数返回true就会把之前生成的Unicode编码+1,a函数参数分别是c数组和Unicode取余32后的值,然后再把Unicode取余32后的值push进c数组,这里的n值为滑块碎片背景图的name。2.搜索"ranges":,会找到ranges赋值的地方,在此处代码断点,并点击跳过断点,结束此次调试。

老衲爱洗头的博客 1199

我是如何学习 NestJS 的

NestJS企业级后端开发模板实践 本文分享了作者从前端转后端的学习历程和技术实践。作者选择NestJS作为后端入门框架,基于其TypeScript基础和清晰的架构设计,通过阅读文档和项目实践,最终构建了一个企业级后端开发模板。该模板采用六层模块化设计,包含认证授权、数据访问、共享服务等核心功能,集成了PostgreSQL、Redis等基础设施,并实现了RBAC鉴权、接口限流等安全机制。项目注重工程规范和开发体验,提供了完整的开发工具链和统一约定,支持快速创建和部署。文章最后给出了项目启动的具体步骤。

m0_58830399的博客 655

杰理SDK入门教程(二):USB升级程序

开发板升级操作指南 摘要:本文介绍了开发板程序升级的两种方式(常规升级和串口升级),重点说明了常规升级的操作步骤: 拨码设置:提供4种拨码方式(不拨/1档/2档/3档),对应不同指示灯状态和按键要求 硬件连接:强制升级工具需正确连接电脑和开发板(注意USB接口方向) 升级流程:根据拨码状态操作按键,观察指示灯变化(红灯常亮绿灯灭表示进入升级模式) 执行升级:运行SDK中的download.bat完成升级 文中还包含拨码开关说明、指示灯状态对照表以及升级原理说明,帮助用户理解升级过程。升级成功后在设备管理器可

qq_42014563的博客 1123

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

深入理解golevelup/nestjs中的动态模块机制

在现代NestJS应用开发中,动态模块(Dynamic Modules)是一个强大且灵活的特性,它允许开发者在模块导入时传递配置参数,从而实现模块的高度可定制化。golevelup/nestjs项目提供了一个优雅的解决方案,极大地简化了动态模块的创建和使用过程。 ## 动态模块基础概念 动态模块是NestJS框架中的一个高级特性,它允许模块在导入时接收配置参数。与静态模块不同,动态模块可以根据

gitblog_00850的博客 416

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NestJS学习笔记之session

session是服务器,为每个用户的浏览器创建的一个会话对象,这个session 会记录到浏览器的cookie,用来区分用户我们使用的是nestjs,默认框架express它也支持express的插件,所以我们就可以安装express的session需要智能提示可以装一个声明依赖然后在main.ts引入,通过app.use注册session。

qq_39237831的博客 720

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

如何自定义NestJs CRUD控制器:重写方法与扩展功能终极指南

NestJs CRUD是一个强大的开源库,专门为NestJs框架提供快速构建RESTful API的能力。通过使用`@nestjsx/crud`包,开发者可以快速生成标准的CRUD操作,同时保持代码的整洁和可维护性。😊 ## 🔥 为什么需要自定义CRUD控制器? 默认的CRUD控制器虽然功能强大,但在实际项目中往往需要根据业务需求进行定制。比如: - **添加权限验证**:某些操作需要特

gitblog_00902的博客 1036

nestjs实战(三):使用 TypeORM 连接达梦数据库(附源码从零到一,新手也能成功)

新建,复制以下代码:javascriptcolumns: {id: {generated: true, // 自增主键},name: {},age: {},},});

qq_28372005的博客 746

nginx中配置angular项目_使用@nestjs/config在NestJs中实现项目配置

1.Nodejs项目配置与dotenv项目可能会运行在不同的环境下。不同的项目可能需要配置不同的端口、数据库等参数以保证项目运行,同一个项目在开发和测试阶段,也可能需要通过修改配置项来模拟接口条件。在生产环境中,一般通过将配置文件写入环境变量的方式来保证项目运行的安全性和可靠性。但在项目开发阶段,频繁修改环境变量则可能带来很多不必要的麻烦,因此,通过配置文件来实现每个项目的独立配置,既有利于前期开...

weixin_39623805的博客 534

如何用TypeScript为NestJS AI服务构建不可绕过的类型防火墙?

掌握TypeScript+NestJS:AI服务类型校验技巧,构建安全可靠的后端接口。通过严格类型约束与运行时验证结合,防止AI响应数据异常,提升系统稳定性。适用于AI网关、模型服务化等场景,实现全流程类型可控,值得收藏。

CompiWander的博客 270

NestJS项目调试全攻略:VsCode中launch.json的隐藏技巧与实战优化

本文深入解析了在VsCode中高效调试NestJS项目的核心技巧,重点剖析了launch.json配置文件的隐藏功能与实战优化策略。内容涵盖高级参数配置、环境变量注入、多服务调试组合以及条件断点等实用技巧,旨在帮助开发者显著提升Node.js后端应用的调试效率与问题定位能力。

yog99的博客 435

RabbitMQ: 实现高效消息监听之从基础到自动配置

RabbitListener 简化了 RabbitMQ 消息监听,通过注解实现零侵入式开发。核心优势包括注解驱动、自动声明交换机和队列、灵活配置集成。支持声明式创建资源,配置TTL和死信队列等高级特性。在NestJS中可通过环境变量动态加载配置,自动管理连接和通道。提供三种实用方案:基础监听、自定义连接和多队列绑定,涵盖消息确认、死信处理等场景。还支持连接池管理和消息序列化配置,实现完整的消息队列解决方案。该方案显著提升开发效率,降低RabbitMQ使用复杂度。

Wang的专栏 1745

构建高可用部署架构:SvelteKit多环境策略深度解析

面对现代Web应用日益复杂的部署需求,技术团队需要在开发效率、运维成本和应用性能之间找到最佳平衡点。SvelteKit作为新兴的全栈框架,其灵活的架构设计为不同业务场景提供了多样化的部署路径。本文将通过实际案例分析,探讨从快速原型到企业级系统的部署策略选择,帮助技术决策者构建符合业务需求的部署架构。 ## 快速原型验证:边缘优先的敏捷开发路径 在项目早期阶段,快速验证产品概念和用户体验是首要目

gitblog_00293的博客 203

VonaJS AOP编程:全局中间件全攻略

在VonaJS框架中,AOP编程包括三方面:控制器切面、内部切面和外部切面。控制器切面包括五能力:Middleware、Guard、Interceptor、Pipe、Filter。其中,Middleware又分为:局部中间件、全局中间件和系统中间件。

zhennann的博客 886

如何使用Auxílio RS报表生成功能:轻松创建自定义救援数据报告

Auxílio RS是一个专注于应对洪水和内涝紧急情况的救援响应项目,其报表生成功能能够帮助救援人员快速获取关键救援数据,优化资源分配和决策制定。本文将详细介绍如何利用这一强大功能创建符合需求的自定义救援数据报告。 ## 🌟 报表生成功能核心价值 Auxílio RS的报表生成功能集成在[src/dashboard/dashboard.service.ts](https://link.git

gitblog_00148的博客 812
上一篇: 前端架构: 脚手架之使用Ora在终端中实现输出Loading
下一篇: React18原理: React核心对象之Update、UpdateQueue、Hook、Task对象
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值