Nest.js权限管理系统开发(三)环境变量与配置文件

一般来说数据库的配置包含了一些敏感信息,不宜写在代码中提交到远程仓库,所以我们可以将配置写在配置文件中,然后提交 git 时候将生产环境的配置文件其忽略。我们可以新建.env.env.prod两个文件分别存放开发与生产环境配置,也可以使用YAML等文件格式来实现自定义的配置文件。

设置环境变量

我们还安装 cross-env 来判断我们是处于什么环境:

npm install cross-env

然后修改package.json中的script:

 "start:dev": "cross-env NODE_ENV=development nest start --watch","start:debug": "cross-env NODE_ENV=development nest start --debug --watch","start:test": "cross-env NODE_ENV=test node dist/main","start:prod": "cross-env NODE_ENV=production node dist/main",

自定义配置文件

这样生成环境的NODE_ENV 就是命令中指定的值了,我们可以根据这个加载不同配置文件。想要加载配置文件,NestJS 给我们提供了@nestjs/config,这个需要手动安装:

$ npm i --save @nestjs/config

我们创建一个config文件夹来专门存放配置文件。在其中创建不同环境对应的配置文件:

创建一个ts文件来读取和解析 YAML 文件,我们可以利用 js-yaml 包。

$ npm i js-yaml
$ npm i -D @types/js-yaml

安装包后,我们使用 yaml#load 函数加载我们刚刚在上面创建的 YAML 文件:

//config/index.ts
import { readFileSync } from 'fs'
import yaml from 'js-yaml'
import { join } from 'path'const configFileNameObj = {development :'dev',test: 'test',production: 'prod',docker: 'docker'
}const env = process.env.NODE_ENV as keyof typeof configFileNameObjexport default () => {return yaml.load(readFileSync(join(__dirname, `./${configFileNameObj[env]}.yml`), 'utf8')) as Record<string, any>
}

在构建过程中,Nest CLI 不会自动将 "assets"(非 TS 文件)移动到 dist 文件夹。为了确保你的 YAML 文件被复制,你必须在 nest-cli.json 文件的 compilerOptions#assets 对象中指定它。例如,如果 config 文件夹与 src 文件夹处于同一级别,则添加值为 "assets": [{"include": "../config/*.yaml", "outDir": "./dist/config"}]compilerOptions#assets。我们的例子如下:

 在app.module.ts进行配置:

import configuration from './config/index'// 配置模块ConfigModule.forRoot({cache: true,load: [configuration],isGlobal: true,}),

应用配置

现在我们来替换前面TypeOrmModule中的配置:

mysql相关配置内容如下:

app.moudle.ts中修改如下:

// 数据库TypeOrmModule.forRootAsync({imports: [ConfigModule],inject: [ConfigService],useFactory: (config: ConfigService) => {return {type: 'mysql',autoLoadEntities: true,keepConnectionAlive: true,...config.get('db.mysql'),// cache: {//   type: 'ioredis',//   ...config.get('redis'),//   alwaysEnabled: true,//   duration: 3 * 1000, // 缓存3s// },} as TypeOrmModuleOptions},}),

同理,我们将Redis的配置设置如下:

然后应用配置:


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java面试:分布式事务

文章目录 引言I 基础知识1.1 事务(Transaction)1.2 本地事务1.3 分布式事务II 分布式理论2.1 CAP原理2.2 BASE理论2.3 刚柔事务2.4 解决分布事务模型2.5 2PC2.6 3PC2.7 TCC(Try-Confirm-Cancel)补偿事务III Seata 分布式事务

美赛教程:如何参与并胜出数学建模竞赛

一、引言 美国大学生数学建模竞赛&#xff08;MCM/ICM&#xff0c;通常被称为“美赛”&#xff09;是全球范围内最具影响力和挑战性的大学生数学建模竞赛之一。参与美赛不仅能锻炼大学生的数学建模、问题分析、团队协作和英文写作能力&#xff0c;还能为他们未来的学术和职业生…

【Elasticsearch专栏 12】深入探索:Elasticsearch使用索引生命周期管理(ILM)自动化删除旧数据

导言 在Elasticsearch中&#xff0c;随着数据的不断积累&#xff0c;管理旧数据成为了一个重要的问题。为了有效地管理这些数据&#xff0c;Elasticsearch提供了索引生命周期管理&#xff08;ILM&#xff09;功能。ILM允许根据索引的年龄、大小或其他条件自动执行一系列操作&a…

2024-2-22 作业

作业要求&#xff1a; 复习前面知识点(指针、结构体、函数)整理思维导图顺序表(按位置插入、按位置删除和去重、重新写)理解链表的代码&#xff0c;尝试写一下链表的尾插和输出 1.复习前面知识点(指针、结构体、函数) 2.整理思维导图 3.顺序表(按位置插入、按位置删除和去重、…

J7 - 对于ResNeXt-50算法的思考

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 J6周有一段代码如下 思考过程 首先看到这个问题的描述&#xff0c;想到的是可能使用了向量操作的广播机制然后就想想办法验证一下&…

Vue 图片轮播第三方库 介绍

Vue图片轮播是一种在网页上以自动或手动方式展示图片的组件&#xff0c;常用于产品展示、网站banner等场景。有许多第三方库可以帮助Vue开发者轻松实现图片轮播功能。以下是一些流行的Vue图片轮播第三方库的介绍&#xff1a; 1. Vue-awesome-swiper - **简介**&#xff1a;V…

数字化转型导师坚鹏:县域数字化转型案例研究

县域数字化转型案例研究 课程背景&#xff1a; 很多县级政府存在以下问题&#xff1a; 不清楚县域数字化转型的发展模式 不清楚县域数字化转型的成功案例 课程特色&#xff1a; 针对性强 实用性强 创新性强 学员收获: 学习县域数字化转型的发展模式。 学习县…

链表-----节点最大值,累加和,统计节点个数,逆序数据建立链表以及回文字符串

链表-节点最大值 本题要求实现一个函数&#xff0c;遍历一个不带头节点的链表&#xff0c;求链表节点数据的最大值 节点类型定义&#xff1a; struct node { int ch ; struct node *next ;} 函数接口定义&#xff1a; 在这里描述函数接口。例如&#xff1a; int max_node( …

C/C++的内存管理(2)——new与delete的内核与本质

内存管理 operator new 与 operator delete函数回看new与delete的实现内置类型自定义类型 常见面试题 我们已经知道了new与delete的用法及其好处&#xff0c;发现它似乎与C语言中的动态内存开辟的函数&#xff08;malloc/calloc/realloc&#xff09;不同 在这里我们特别指出&am…

Word第一课

文章目录 1. 文件格式1.1 如何显示文件扩展名1.2 Word文档格式的演变1.3 常见的Word文档格式 3. 文档属性理解文档属性查看文档属性 4. 显示比例方式一&#xff1a; 手动调整方式二&#xff1a; 自动调整 5. 视图、窗口视图 1. 文件格式 1.1 如何显示文件扩展名 文档格式指的…

Java零基础 - 算术运算符

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

Groq:最快的AI芯片

背景 Groq 是一家由多位前 Google TPU 开发者组建的芯片公司。成立于 2016 年底&#xff0c;Groq 的目标是为 AI 和 HPC 工作负载提供毫不妥协的低延迟和高性能。与传统的 CPU 和 GPU 架构不同&#xff0c;Groq 从头设计了一个张量流处理器&#xff08;TSP&#xff09;架构&am…

Nginx缓存相关配置解析

文章目录 前言配置示例proxy_cacheproxy_cache_pathproxy_cache_keyproxy_cache_validproxy_cache_lockproxy_cache_methodsproxy_cache_bypassproxy_no_cacheproxy_cache_min_usesadd_header 可选项 使用示例通过响应头判断是否走缓存 缓存手动删除原博客 前言 客户端需要访问…

C#与VisionPro联合开发——TCP/IP通信

TCP/IP&#xff08;传输控制协议/互联网协议&#xff09;是一组用于在网络上进行通信的通信协议。它是互联网和许多局域网的基础&#xff0c;为计算机之间的数据传输提供了可靠性、有序性和错误检测。在软件开发中&#xff0c;TCP/IP 通信通常用于实现网络应用程序之间的数据交…

latex笔记总结

目录 latex基本语法latex双列单列相互转换公式对齐方法表格格式问题latex设置图片 latex基本语法 在LaTeX中如何使用波浪号 latex双列单列相互转换 单栏&#xff1a;\documentclass[journal,11pt,draftclsnofoot,onecolumn]{IEEEtran} 双栏&#xff1a;\documentclass[journ…

利用Socket.io实现实时通讯功能

在当今快节奏的社交和工作环境中&#xff0c;实时通讯已经变得至关重要。无论是在线游戏的即时交流&#xff0c;还是团队协作中的实时消息传递&#xff0c;都需要强大的实时通讯功能来支持。而在前端开发中&#xff0c;利用Socket.io这一强大的工具库&#xff0c;实现实时通讯功…

自定义Chrome的浏览器开发者工具DevTools界面的字体和样式

Chrome浏览器开发者工具默认的字体太小&#xff0c;想要修改但没有相关设置。 外观——字体可以自定义字体&#xff0c;但大小不可以调整。 github上有人给出了方法 整理为中文教程&#xff1a; 1.打开浏览器开发者工具&#xff0c;点开设置——实验&#xff0c;勾上红框设…

五、使用脚手架

五、使用脚手架 5.1 简单的实现 创建一个 School 组件 <template> <div><h2>学校名称&#xff1a;{{name}}</h2><h2>学校地址&#xff1a;{{address}}</h2> </div> </template><script> export default {name: "S…

猜字谜|构建生成式 AI 应用实践(一)

在 2023 亚马逊云科技 re:Invent 之后&#xff0c;细心的开发者们也许已经发现有一个很有趣的动手实验&#xff1a;开发一款可部署的基于大语言模型的字谜游戏&#xff1a; 该款游戏使用了文生图模型为玩家提供一个未知的提示词&#xff0c;玩家需要根据模型生成的图像来猜测该…

众安保险基于Apache SeaTunnel的生产应用实践

*> 文&#xff5c;曾力 众安保险大数据开发高级专家 编辑整理&#xff5c; 曾辉* 前言 众安保险从2023年4月就开始了数据集成服务的预研工作&#xff0c;意在通过该服务解决当前数据同步场景下的两大痛点&#xff0c;服务化能力薄弱和无分布式同步能力。我们对多种开源数据…